Мы только что мигрировали из TFVC в Git, и у нас сразу же возникла проблема - как выбрать TFVC в Git?
С учетом
- TFVC филиал
$/Alice
- TFVC филиал
$/Bob
- Репозиторий Git с
$/Alice
перенесен как ветвь alice
и $/Bob
- как ветвь bob
.
- История TFVC не была перенесена, поэтому вся история TFVC $ / Alice - это всего лишь один коммит Git. То же самое верно для
$\Bob
.
Проблема
Теперь мы обнаруживаем коммит TFVC в $/Alice
, который не был объединен с $/Bob
до миграции. Теперь, после миграции, мы понимаем, что она должна быть в ветке bob
. Большой облом.
Я говорю о большом изменении - много файлов. Следовательно, диффузия файлов вручную и копирование изменений не очень осуществимы. Мне нужно максимально автоматизировать процесс.
Что я до сих пор делал
Я подумал, что должен создать патч для рассматриваемой ревизии TFVC. Итак, вот код (при условии, что мне нужно выбрать вишню коммит 123):
$files = (tf changeset /noprompt 123 | sls '\$/') -replace '^[^$]+',''
$files |% { tf diff /version:C122~C123 /format:unified $_ } >> 123.diff
(я делаю это файл за файлом, потому что это намного быстрее, чем запуск tf diff
с флагом /r
)
В любом случае, я получаю файл патча, подобный этому:
File: BackgroundJobTests\BackgroundJobTests.csproj
===================================================================
--- Server: BackgroundJobTests.csproj;115493
+++ Server: BackgroundJobTests.csproj;389742
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
===================================================================
File: BI\a8i\a8i.csproj
===================================================================
--- Server: a8i.csproj;342293
+++ Server: a8i.csproj;389742
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
...
Типичный патч Git stash выглядит немного иначе:
diff --git a/Yogi.txt b/Yogi.txt
index 056fd9e..1f73d44 100644
--- a/Yogi.txt
+++ b/Yogi.txt
@@ -1 +1 @@
-yaba daba do
+yaba daba doo
diff --git a/hello.txt b/hello.txt
index ce01362..980a0d5 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-hello
+Hello World!
И здесь я чувствую, что мне нужно руководство. Может быть, я делаю все неправильно, и есть готовое решение для моей боли. Или, может быть, я нахожусь в правильном направлении, и все, что мне нужно, это способ «обмануть» Git, чтобы он принял мой патч как патч-тайник. Но дьявол кроется в деталях, а мне их не хватает.