Мы только что перешли с TFVC на Git, и сразу же у нас возникла проблема — как правильно выбрать коммиты TFVC для Git?
Дано
- Филиал ТФВК
$/Alice
- Филиал ТПВК
$/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, чтобы он принял мой патч в качестве тайника. Но дьявол кроется в деталях, а мне их не хватает.