git read-tree 删除了所有历史记录
git read-tree removed all the history
我正在尝试使用 git read-tree
.
合并两个存储库
问题是,合并文件的先前提交历史消失了。我确实逐个文件检查过。
我根据这篇文章按照正常的方式进行子树合并:
6.7 Git Tools - Subtree Merging
$ git remote add rack_remote git@github.com:schacon/rack.git
$ git fetch rack_remote
$ git checkout -b rack_branch rack_remote/master
$ git read-tree --prefix=rack/ -u rack_branch
我当前的工作区结构如下:
project P
- repoA
- repoB
- repoC
(... and many more repos)
我想更改它们的层次结构,使其成为:
project P
- repoA <=== have repoB and repoC inside.
在上面的示例中我看不到合并文件的历史记录,在 git log
结果中我也看不到。
(我想强调我的存储库是 svn 克隆的,仍然链接到 svn 存储库。这会影响读取树行为吗?)
编辑:我尝试使用原始 Github 回购协议,问题是一样的。
您可以将两个存储库合并为一个。即
git clone repoB
cd repoB
mkdir b_proj_dir
git mv * b_proj_dir/
git commit -m "move b to subfolder"
cd ..
git clone repoA
cd repoA
git fetch ../repoB
git merge --allow-unrelated-histories FETCH_HEAD
您描述的步骤不会将合并的历史记录添加为第二个父项。从 link 中的文字来看,这似乎是他们的意图。由于您的意图不同,您应该稍微修改一下命令:
$ git remote add rack_remote git@github.com:schacon/rack.git
$ git fetch rack_remote
现在,首先启动合并。该命令使用 "ours" 策略,因此它并没有真正改变任何东西。
$ git merge -sours --no-commit rack_remote/master
然后修改内容:
$ git read-tree --prefix=rack/ -u rack_remote/master
最后提交(将生成编辑器):
$ git commit
现在大功告成:子目录中有合并文件及其历史记录。
这可能不是创建具有任意内容的合并提交的唯一方法,而是第一个对我有用的方法。另请注意,无需创建本地分支镜像rack_remote/master
,可以使用远程引用
PS:您需要使用 --follow 来跟踪文件历史记录,因为合并重命名了它们。
我正在尝试使用 git read-tree
.
合并两个存储库
问题是,合并文件的先前提交历史消失了。我确实逐个文件检查过。
我根据这篇文章按照正常的方式进行子树合并:
6.7 Git Tools - Subtree Merging
$ git remote add rack_remote git@github.com:schacon/rack.git
$ git fetch rack_remote
$ git checkout -b rack_branch rack_remote/master
$ git read-tree --prefix=rack/ -u rack_branch
我当前的工作区结构如下:
project P
- repoA
- repoB
- repoC
(... and many more repos)
我想更改它们的层次结构,使其成为:
project P
- repoA <=== have repoB and repoC inside.
在上面的示例中我看不到合并文件的历史记录,在 git log
结果中我也看不到。
(我想强调我的存储库是 svn 克隆的,仍然链接到 svn 存储库。这会影响读取树行为吗?)
编辑:我尝试使用原始 Github 回购协议,问题是一样的。
您可以将两个存储库合并为一个。即
git clone repoB
cd repoB
mkdir b_proj_dir
git mv * b_proj_dir/
git commit -m "move b to subfolder"
cd ..
git clone repoA
cd repoA
git fetch ../repoB
git merge --allow-unrelated-histories FETCH_HEAD
您描述的步骤不会将合并的历史记录添加为第二个父项。从 link 中的文字来看,这似乎是他们的意图。由于您的意图不同,您应该稍微修改一下命令:
$ git remote add rack_remote git@github.com:schacon/rack.git
$ git fetch rack_remote
现在,首先启动合并。该命令使用 "ours" 策略,因此它并没有真正改变任何东西。
$ git merge -sours --no-commit rack_remote/master
然后修改内容:
$ git read-tree --prefix=rack/ -u rack_remote/master
最后提交(将生成编辑器):
$ git commit
现在大功告成:子目录中有合并文件及其历史记录。
这可能不是创建具有任意内容的合并提交的唯一方法,而是第一个对我有用的方法。另请注意,无需创建本地分支镜像rack_remote/master
,可以使用远程引用
PS:您需要使用 --follow 来跟踪文件历史记录,因为合并重命名了它们。