我在问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.
这很有用,因为有时我想将我的本地更改与base进行比较,或者将远程更改与base进行比较。或者只是选择一个文件,并将其设置为冲突的解决方案。
使用git并发生冲突,我看到工作目录中的文件已满,并带有'>>>''<<<'符号。
我可以从git中获得类似svn的类似行为,并拥有这些其他文件吗?我看过git文档,但找不到合适的东西。
有什么主意吗?
答案 0 :(得分:2)
如果您想查看冲突的基本版本(如果必须询问,这是必须的),则可以通过将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/book/en/v2/Git-Tools-Advanced-Merging的信息
答案 1 :(得分:0)
最后,我发现了一种创建这些文件的简单方法,尽管它并不简单。
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'(将进程ID添加到文件名的新文件)的新文件:
$ ls
a.txt a_BACKUP_9348.txt a_BASE_9348.txt a_LOCAL_9348.txt a_REMOTE_9348.txt