有一个GIT
存储库(REPO1
)。很久以前,它具有以下布局:
bin
file.sh
src
file.cpp
然后 bin 已迁移到CVS
(REPO2
)。布局变为:
REPO1
src
file.cpp
REPO2
file.sh
现在,我想将 file.sh 及其历史移到REPO1
的 bin 子文件夹中。我使用CVS
将GIT
迁移到了新的REPO3
存储库cvs2git
。
回购的历史是:
REPO1 REPO3
N X
| |
| |
D |
| |
O2 O'2
| |
O1 O'1
bin
中删除REPO1
时提交。REPO3
中具有 O'1 和 O'2 兄弟姐妹,但是具有不同的提交ID(文件树已更改)。现在我想拥有以下历史记录:
M
| \
N X
| |
D |
| /
O2
|
O1
我尝试使用git subtree -P bin REPO3
,但是在文件驻留在REPO1
期间,它复制了 file.sh 的历史记录。
M
| \
N X
| |
D |
| |
O2 O'2
| |
O1 O'1
然后我尝试使用git checkout -b temp_branch O2; git cherry-pick O'2..X
仅从REPO3
获取“新”提交,但是由于REPO3
的布局不同而失败(没有 bin 文件夹)。
也许有更多标准的方法可以完成我的任务?还是错过了一些对我有帮助的步骤?
答案 0 :(得分:1)
cvs2git以fast-import
格式生成文件。它是一种相对简单的格式,可以使用文本工具(如sed)进行修改。尝试修改快速导入内的所有路径并添加bin/
路径前缀。
快速导入格式的描述可以在这里找到:https://git-scm.com/docs/git-fast-import