将文件重新集成到GIT存储库的子文件夹中

时间:2018-09-17 11:25:12

标签: git

有一个GIT存储库(REPO1)。很久以前,它具有以下布局:

bin
    file.sh
src
    file.cpp

然后 bin 已迁移到CVSREPO2)。布局变为:

REPO1

src
    file.cpp

REPO2

file.sh

现在,我想将 file.sh 及其历史移到REPO1 bin 子文件夹中。我使用CVSGIT迁移到了新的REPO3存储库cvs2git

回购的历史是:

REPO1    REPO3
N          X
|          |
|          |
D          |
|          |
O2        O'2
|          |
O1        O'1
  • D -从bin中删除REPO1时提交。
  • O1 O2 -常见提交。它们在REPO3中具有 O'1 O'2 兄弟姐妹,但是具有不同的提交ID(文件树已更改)。

现在我想拥有以下历史记录:

M
| \
N  X
|  |
D  |
| /
O2
|
O1
  • M -合并提交

我尝试使用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 文件夹)。

也许有更多标准的方法可以完成我的任务?还是错过了一些对我有帮助的步骤?

1 个答案:

答案 0 :(得分:1)

cvs2git以fast-import格式生成文件。它是一种相对简单的格式,可以使用文本工具(如sed)进行修改。尝试修改快速导入内的所有路径并添加bin/路径前缀。

快速导入格式的描述可以在这里找到:https://git-scm.com/docs/git-fast-import