Если я понимаю правильно, по существу, Вы хотите знать, сколько фиксаций произошло на данном файле начиная с Вас последнее обновление.
Первый получают изменения в удаленном источнике, но не объединяют их в Ваш master
ответвление:
% git fetch
Затем получают журнал изменений, которые произошли на данном файле между Вашим master
ответвление и удаленным origin/master
.
% git log master..origin/master foo.el
Это дает Вам сообщения журнала всех фиксаций, которые произошли в удаленном репозитории, так как Вы в последний раз объединились origin/master
в Ваш master
.
, Если Вы просто хотите количество изменений, передайте его по каналу к wc
. Скажите, как это:
% git rev-list master..origin/master foo.el | wc -l
У вас должна быть возможность сгенерировать ItemGroup, содержащую Dirs, а затем%.
<ItemGroup>
<Dirs Include="C:\DirA\;C:\DirB\">
</ItemGroup>
<Target Name="CopyFiles"
Condition="Exists('%(Dirs)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '%(Dirs)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="%(Dirs)" />
</Target>
Или вы можете сделать 2 явных вызова:
<Target Name="CopyFiles">
<MsBuild Projects="$(MSBuildProjectFullPath)" Targets="CopyASetOfFiles" Properties="FilesToCopy=@(FilesToCopy);DestDir=$(DirA)" />
<MsBuild Projects="$(MSBuildProjectFullPath)" Targets="CopyASetOfFiles" Properties="FilesToCopy=@(FilesToCopy);DestDir=$(DirB)" />
</Target>
<Target Name="CopyASetOfFiles"
Condition="Exists('$(DestDir)') AND '@(FilesToCopy)' != ''"
Inputs="@(FilesToCopy)"
Outputs="@(FilesToCopy -> '$(DestDir)%(Filename)%(Extension)')">
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(DestDir)" />
</Target>
Я не тестировал ни один синтаксис, но Я относительно более уверен во втором.
(Ответ, если он есть, находится в моей книге «Сайед Хашими» на моем столе - вам придется подождать до первого из:
Да, то, что вы хотите, называется пакетной обработкой в MSBuild.
;%(Dirs.Identity)
, определенный в выходных данных, вызовет выполнение этой задачи для каждого элемента в Dirs ItemGroup.
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="CopyFiles"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<ItemGroup>
<Dirs Include="C:\DirA" />
<Dirs Include="C:\DirB" />
</ItemGroup>
<Target Name="CopyFiles"
Inputs="@(FilesToCopy);@(Dirs)"
Outputs="@(FilesToCopy -> '%(Dirs.Identity)%(Filename)%(Extension)');%(Dirs.Identity)" >
<Message Text="%(Dirs.Identity)" />
</Target>
</Project>
Выходы:
Build started 8/19/2009 10:11:57 PM.
Project "D:\temp\test.proj" on node 0 (default targets).
C:\DirA
CopyFiles:
C:\DirB
Done Building Project "D:\temp\test.proj" (default targets).
Измените задачу «Сообщение» на задачу «Копировать» со следующим условием, и все готово:
Condition="Exists('%(Dirs.Identity)') AND '@(FilesToCopy)' != ''"
Как уже упоминалось, ответ - пакетная обработка.
Вот несколько ссылок: