может конфликтовать создать дополнительные файлы, как это делает SVN - PullRequest
0 голосов
/ 26 июня 2019

Я спрашиваю о функции SVN, которую я хочу знать, существует ли она для Git или нет:

Когда SVN имеет конфликты, он создает некоторые дополнительные файлы, которые иногда полезны:

См. https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-conflicts.html

filename.mine - my original file as it existed at the working directory.

filename.BASE_REVISION - The file which is the BASE revision before you updated your working copy. It is the file checked out before you made your latest edits.

filename.NEW_REVISION - This is the file that Subversion client just received from the server. Actually this is the file we want to merge with.

Это полезно, так как иногда я хочу сравнить свои локальные изменения с базой или удаленные изменения с базой.или просто выберите один файл и установите его как разрешение конфликта.

Используя git и получая конфликты, я вижу, что файл в рабочем каталоге заполнен '>>>' '<<<'признаки. </p>

Могу ли я получить из git аналогичное поведение, как svn, имея эти дополнительные файлы?Я просмотрел документацию по git и не нашел ничего подходящего.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Если вы хотите увидеть базовую версию конфликта (которая является обязательной, если вы спросите меня), это может быть достигнуто путем установки merge.conflictStyle в diff3.И я вижу это в git help merge:

4. For conflicting paths, the index file records up to three versions: stage 1 stores
   the version from the common ancestor, stage 2 from HEAD, and stage 3 from
   MERGE_HEAD (you can inspect the stages with git ls-files -u). The working tree
   files contain the result of the "merge" program; i.e. 3-way merge results
   with familiar conflict markers <<< === >>>.

Итак, с git ls-files -u вы получите список файлов, для конфликта вы получите что-то вроде:

$ git ls-files -u
  100755 ac51efdc3df4f4fd328d1a02ad05331d8e2c9111 1 hello.rb
  100755 36c06c8752c78d2aff89571132f3bf7841a7b5c3 2 hello.rb
  100755 e85207e04dfdd5eb0a1e9febbc67fd837c44a1cd 3 hello.rb

Затем вы можете сделать это:

git show :1:hello.rb # common ancestor
git show :2:hello.rb # HEAD
git show :3:hello.rb # the other branch

Используйте перенаправление, если вы хотите, чтобы они были в качестве файлов для целей анализа.

Информация от https://git -scm.com /книга / а / v2 / GIT-Tools-Advanced-Слияние

0 голосов
/ 27 июня 2019

Наконец-то я нашел более простой способ создания этих файлов, хотя он не прост.

git mergetool создает желаемые файлы.Если я запускаю команду с несуществующим инструментом слияния для данного конфликтного файла, он генерирует базовый файл, локальный файл и удаленный файл, аналогично тому, что генерирует svn:

git mergetool --tool whatever a.txt

вывод:

Merging:
a.txt
Normal merge conflict for 'a.txt':
   {local}: modified file
   {remote}: modified file
Unknown merge tool whatever

теперь ls показывает новые файлы с именами 'a_BASE', 'a_LOCAL', 'a_REMOTE' (с идентификатором процесса, добавленным к имени файла):

$ ls
a.txt  a_BACKUP_9348.txt  a_BASE_9348.txt  a_LOCAL_9348.txt  a_REMOTE_9348.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...