git - 将两个相似的、未跟踪的目录合并到一个 git 存储库中
问题描述
所以,我有两个目录树,一个在我的台式计算机上,一个在我的笔记本电脑上。它们主要包含文本文件。它们应该是等效的,我尝试手动使它们模糊同步。显然,这是一种低效的方法,并且缺乏任何类型的版本控制。
所以,我希望它们成为一个 Git 存储库。问题是,这两个目录不相同;每一个都与我上次同步的东西略有偏差,而且我的同步一直是马虎和不平衡的。此外,两者都不是 Git 存储库。所以这就是我想做的:
- 创建一个新的 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 兼容的各种其他工具也可以执行双向合并。
推荐阅读
- c - 如何在 2 个不同的函数中使用 fopen()
- r - 细分面板数据以应用功能
- node.js - 如何覆盖 Heroku 上的 nodemobules 文件?
- python - 如何将作为函数列表的输出传递到可以在其他函数中使用的变量中?
- python - 除非我停止并重新启动程序,否则我无法选择最近的 INSERT 到我的数据库
- r - R中的调查包:如何设置fpc参数(有限人口校正)
- file-upload - 部署在 Google App Engine 上的 Strapi 无法看到刚刚使用 Strapi Provider for Google Storage 上传的图像
- google-sheets - 一种在不同工作表之间计数的谷歌表格方法?
- sql - 在临时表中搜索时的条件 AND 语句
- sql - 使用 AND 时 SQLite 不返回结果