假设我的设置看起来很像
phd/code/
phd/figures/
phd/thesis/
Run Code Online (Sandbox Code Playgroud)
由于历史原因,这些都有自己的git存储库.但我想将它们合并为一个,以简化一些事情.例如,现在我可能会进行两组更改,并且必须执行类似的操作
cd phd/code
git commit
cd ../figures
git commit
Run Code Online (Sandbox Code Playgroud)
表演(现在)很棒
cd phd
git commit
Run Code Online (Sandbox Code Playgroud)
似乎有几种方法可以使用子模块或从我的子存储库中提取,但这比我正在寻找的要复杂一些.至少,我很高兴
cd phd
git init
git add [[everything that's already in my other repositories]]
Run Code Online (Sandbox Code Playgroud)
但这似乎不是一个单行.有什么git可以帮助我吗?
我不太了解git.: - /
我有两个不相关的基于git的文档存储库,我想将它们合并到一个存储库中.我想保留原始时间戳(可追溯到2005年)和单个文件历史记录.这两个repos不包含分支,没有文件夹,并且在文件命名方面没有重叠.
在ASCII-land中,它看起来像这样:
REPO A |-------------------------|
REPO B |===============|
Run Code Online (Sandbox Code Playgroud)
重叠表示时间.
我的目标是"拉上"重叠的时间戳,以便两个回购看起来像一个完整的历史记录:
REPO A+B |-------------------==--=---============|
Run Code Online (Sandbox Code Playgroud)
再一次,我不太了解git,所以我可以把事搞砸了.
首先,我尝试将较新的较小的repo添加为较大的旧repo的远程,获取更改并提交结果.在旧的回购后,我结束了所有新的回购变更集中在一个分支:
MERGE |------------------------- -|
\===============/
Run Code Online (Sandbox Code Playgroud)
接下来我尝试了rebasing(with --committer-date-is-author-date),我认为它可以工作,但最后我得到一个长的提交历史,只是将两个repos堆叠在一起.
REBASE |-------------------------===============|
Run Code Online (Sandbox Code Playgroud)
我无法找到一种"重播"组合历史的方法.我真的希望rebase能成为答案.