我有一个像这样组织的顶级 git repo:
我怎样才能将 gitadd
和commit
repoA
(和repoA/.git
)当作常规文件/文件夹一样?
具体来说,我想绕过将此类文件夹作为子模块的处理,但我想保留嵌套 repo 的分支/历史记录(因此.git
需要该文件夹)。
我不想改变嵌套存储库的状态(通过提交或合并历史记录),也不想将它推送到远程的单独存储库。
预期的结果与我稍后tar
repoA
取消的结果相同tar
。也就是说,所有文件都是完整的,没有被 git 修改或特殊处理。
这不是直接可能的。该.git
目录对于git
. 当您从 git 工作树内部(不一定是从顶层)运行 git 操作而没有显式指定存储库的路径(通过选项--git-dir
或GIT_DIR
环境变量)时,会通过查找第一个祖先目录来自动发现后者包含一个.git
子目录。.git
旨在被视为常规内容的目录会干扰该过程。
但是,我可以建议以下解决方法:
.git
目录重命名为其他名称(例如.git.subrepo
、.pseudogit
等):mv repoA/.git repoA/.pseudogit
Run Code Online (Sandbox Code Playgroud)
git add repoA
git commit -m "Added repoA as regular sub-directory"
Run Code Online (Sandbox Code Playgroud)
此后,子存储库树内部的 git 操作将默认使用主存储库进行工作。当您需要研究子存储库的历史记录时,您将不得不使用以下--git-dir
选项:
cd repoA
git --git-dir .pseudogit log
Run Code Online (Sandbox Code Playgroud)