请考虑以下情形:
我在自己的Git仓库中开发了一个小型实验项目A. 它现在已经成熟,我希望A成为更大的项目B的一部分,它有自己的大型存储库.我现在想添加A作为B的子目录.
如何将A合并到B中,而不会丢失任何一方的历史记录?
如何取消子模块git子模块(将所有代码重新放入核心)?
就像"应该"我一样,如"最佳程序"......
我需要将两个Git存储库合并到一个全新的第三个存储库中.我已经找到了很多关于如何使用子树合并进行此操作的描述(例如JakubNarębski关于如何合并两个Git存储库的答案?)并遵循这些说明大多数工作,除了当我提交子树合并所有文件从旧存储库记录为新添加的文件.我可以在旧的存储库中看到提交历史记录git log
,但如果我这样做git log <file>
,则只显示该文件的一次提交 - 子树合并.从对上述答案的评论来看,我并不是唯一一个看到这个问题的人,但我发现没有公开的解决方案.
有没有办法合并存储库并保持个别文件历史记录完整?
我想在我的工作git存储库中合并一个远程git存储库作为它的子目录.我希望生成的存储库包含两个存储库的合并历史记录,并且合并存储库的每个文件都保留其在远程存储库中的历史记录.我尝试使用如何使用子树合并策略中提到的子树策略,但是在遵循该过程之后,尽管生成的存储库确实包含两个存储库的合并历史记录,但来自远程存储库的单个文件尚未保留其历史记录(任何一个'git log'只显示一条消息"Merged branch ...").
此外,我不想使用子模块,因为我不希望两个组合的git存储库再次分开.
是否可以将远程git存储库合并为另一个存储库作为子目录,来自远程存储库的单个文件保留其历史记录?
非常感谢您的帮助.
编辑:我目前正在尝试使用git filter-branch重写合并的存储库历史记录的解决方案.它似乎确实有效,但我需要再测试一下.我将回来报告我的发现.
编辑2:希望我让自己更清楚我给出了与git的子树策略一起使用的确切命令,这导致远程存储库文件的历史明显丢失.设A是我正在使用的git repo和B git repo我想将它作为它的子目录合并到A中.它做了以下事情:
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
Run Code Online (Sandbox Code Playgroud)
在这些命令进入目录subdir/Iwant/to/put/B/in后,我看到B的所有文件,但是git log
在其中任何一个文件中只显示提交消息"将子目录合并为子目录/ Iwant/to/put/B /中".它们在B中的文件历史记录丢失了.
什么似乎工作(因为我在混帐初学者我可能是错的)如下:
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed …
Run Code Online (Sandbox Code Playgroud) 我有一个Git
项目的大型存储库,我为其创建了一个插件,它也是源控制器Git
.最近我将插件的文件夹复制到主项目文件夹中.现在我有一个项目文件夹源控制Git
和插件的文件夹,也是源控制Git
.我的问题是,有没有办法将提交从插件的存储库导入主存储库,以便我可以摆脱插件的.git
文件夹?
我在一个名为AA的文件夹中有一个GIT存储库,我有第二个名为BB的 GIT存储库.
我想将AA存储库作为子文件夹导入BB存储库.
之前:
AA
|- .git
|- A/
|- fileA
BB
|- .git
|- B/
|- fileB
Run Code Online (Sandbox Code Playgroud)
后:
BB
|- .git # new .git with both AA and BB .git infos
|- B/
|- fileB
|- AA/ # <== no .git anymore
|- AA/A/
|- AA/fileA
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我的本地 git 存储库如下所示
C:\MyRepo
\MyProject
\.git
\ProjectFolder1
\ProjectFolder2
\ProjectFolder3
Run Code Online (Sandbox Code Playgroud)
现在我想添加几个需要直接在“MyRepo”下并且需要属于同一个存储库的文件夹。我想这意味着 .git 文件夹也应该直接放在“MyRepo”下
C:\MyRepo
\.git
\NewFolder1
\NewFolder2
\MyProject
\ProjectFolder1
\ProjectFolder2
\ProjectFolder3
Run Code Online (Sandbox Code Playgroud)
如何在不丢失历史记录的情况下将 .git 文件夹上移一个级别?
我使用的是 Windows 操作系统,git 版本是 2.6.3.windows.1