将两个相似的,未跟踪的目录合并到git存储库中

时间:2018-08-11 00:09:59

标签: git

因此,我有两棵目录树,一棵在台式计算机上,一棵在笔记本电脑上。它们主要包含文本文件。它们应该是等效的,我尝试手动使其模糊地保持同步。显然,这是一种低效的方法,并且缺乏任何版本控制。

因此,我希望它们成为Git存储库。问题在于,两个目录不相同;从上次同步事物开始,每个事物都略有偏离,而且我的同步过程总是马虎不平衡。而且,两个都不是Git存储库。所以这就是我想做的:

  1. 创建一个新的Git存储库,该目录是这两个目录的副本,并且
  2. 协调两个目录之间的差异,以便将一个目录中缺少的所有文件复制到另一个目录中,并且与我冲突的任何文件都可以手动合并。

这不是关于合并两个Git存储库的问题-当前两个目录都没有版本跟踪-也不是关于将一​​个存储库移入另一个存储库。这是关于使用可用的Git工具将两个目录合并到一个新的Git存储库中。谢谢!

1 个答案:

答案 0 :(得分:1)

这个基本想法有效...可能有更好的方法。

创建新的存储库(从新的空目录开始):

git init
touch .gitignore #give git something to commit
git add .
git commit -m "blank directory"

为目录1创建分支

git checkout -b dir1
touch a b c #<3 example files..replace this command by copying directory 1 in here
git add .
git commit -m "directory 1"

为目录2创建分支

git checkout master # very important...start directory 2 from master
git checkout -b dir2
touch c d e #<3 example files..one of which overlaps..again, replace with appropriate directory
git add .
git commit -m "directory 2"

合并分支:

git checkout master
git merge dir1
git merge dir2

新的主目录:

>ls -a
a  b  c  d  e  .gitignore

请注意,我在第一次发布后确实尝试了更复杂的合并(出于好奇)。似乎可以很好地与子目录,具有不同内容的文件等一起使用。一个重要警告 可能是我的.gitconfig文件中包含以下行:

[diff]
        algorithm = minimal
[merge]
        tool = vimdiff
[mergetool "diffconflicts"]
        cmd = vim -c DiffConflicts \"$MERGED\" \"$BASE\" \"$LOCAL\" \"$REMOTE\"
        trustExitCode = true

为此git mergetool -t diffconflicts我使用了diffconflicts工具(一个vim插件)。它基于diff标记至少执行两次双向合并。它确实了解基础,但是我不确定它在乎什么程度。与git兼容的其他各种工具也可以执行双向合并。