首页 > 解决方案 > 将两个相似的、未跟踪的目录合并到一个 git 存储库中

问题描述

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

所以,我希望它们成为一个 Git 存储库。问题是,这两个目录不相同;每一个都与我上次同步的东西略有偏差,而且我的同步一直是马虎和不平衡的。此外,两者都不是 Git 存储库。所以这就是我想做的:

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

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

标签: git

解决方案


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

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

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

我为此使用了 diffconflicts 工具(一个 vim 插件)git mergetool -t diffconflicts。它基于差异标记执行至少大部分双向合并。它确实知道基础,但我不确定它关心的程度。与 git 兼容的各种其他工具也可以执行双向合并。


推荐阅读