从下面的代码(来源:Merge two Git repositories without breaking file history)中,我无法直观地了解old_a / master和old_b / master在流程的每个步骤中指向的位置。
# Assume the current directory is where we want the new repository to be created
# Create the new repository
git init
# Before we do a merge, we have to have an initial commit, so we'll make a dummy commit
dir > deleteme.txt
git add .
git commit -m "Initial dummy commit"
# Add a remote for and fetch the old repo
git remote add -f old_a <OldA repo URL>
# Merge the files from old_a/master into new/master
git merge old_a/master
# Clean up our dummy file because we don't need it any more
git rm .\deleteme.txt
git commit -m "Clean up initial file"
# Move the old_a repo files and folders into a subdirectory so they don't collide with the other repo coming later
mkdir old_a
dir -exclude old_a | %{git mv $_.Name old_a}
# Commit the move
git commit -m "Move old_a files into subdir"
# Do the same thing for old_b
git remote add -f old_b <OldB repo URL>
git merge old_b/master
mkdir old_b
dir –exclude old_a,old_b | %{git mv $_.Name old_b}
git commit -m "Move old_b files into subdir"
我的问题:
1)有人可以绘制(图表w /指针)在流程的每一步中所有现有指针会发生什么?
2)如果您在上述步骤之后git push old_a master
或git push old_b master
会怎样? (存储库是否接收包含old_a + old_b内容的整个新文件夹以及原因?)
欣赏任何见解!
答案 0 :(得分:0)
我不会绘制图表,但gitk
(或git log --oneline --graph --decorate
如果您更喜欢文字模式)可以为您做到这一点。默认情况下,他们会显示从HEAD
可以访问的历史记录,如果您想同时查看所有分支,则添加--all
,或者运行gitk old_a/master old_b/master
仅查看两个远程分支的历史记录跟踪您感兴趣的参考文献。
答案 1 :(得分:0)
1)我不会为你画画。使用gitk -a
自己绘制历史记录。
2)我不确定你的dir|%{}
命令是否正确,因为我没有使用Windows cmds,但是,如果你推送到old_a a / o old_b,它们将具有相同的布局您的本地存储库,即
./old_a/AFILES
./old_b/BFILES
因为git甚至不关心文件。内部git只适用于内容,但你告诉git将所有old_a文件转换为新目录./old_a和old_b相同。
实际上git mv是一个shell mv加上git rm oldpath和git add newpath。 当你推送那个提交时,这些rm / add组合将转到old_a和old_b。