个人git repo和.gitignore文件

时间:2018-09-16 09:18:51

标签: git

我正在使用gitlab实例将数据同步到多台计算机,包括我的主目录(减去了诸如ssl键之类的一些东西)。我想看看如何正确处理的一件事是如何忽略〜/ workspace /文件夹等中的回购上的git repo数据。 Git可以提交它们,因为它正确地指出我无法同步另一个仓库。

当前,我正在编写此脚本,因为我还没有搞定.gitignore参数,或者它不受支持。除了我为下拉的每个git repo rm -rf path/to/problem/.git/之外,还有人有更好的主意吗?我有很多人,而且这很累,但是如果这是最好的选择,那就好。我已将所有这些脚本与git add . && git commit -m ....... && git push一起编写。


我能够快速复制错误,尽管我并不在意这个文件夹,但仍然是一个示例。我只是为我的wow插件创建了一个仓库,更新了它们并且没有使用我的脚本。错误如下:

hint: You've added another git repository inside your current repository.  
hint: Clones of the outer repository will not contain the contents of  
hint: the embedded repository and will not know how to obtain it.  
hint: If you meant to add a submodule, use:  
hint:  
hint:   git submodule add <url> EasyDisenchant  
hint:  
hint: If you added this path by mistake, you can remove it from the
hint: index with:  
hint: 
hint:   git rm --cached EasyDisenchant  
hint:  
hint: See "git help submodule" for more information.

主gitignore中的代码行是:

# Ignore git repo data folders
.git  
**/.git

1 个答案:

答案 0 :(得分:1)

解决问题的一种方法是使用submodules

在主存储库中的每个git存储库上,您可以执行以下操作:

cd /path/to/module1
git submodule add ssh://path.to.repo/module1
git commit -m "Added submodule module1"

您将在主存储库级别拥有一个引用所有子模块的新.gitmodules文件。每个子模块将独立存储在其自己的存储库中,还需要独立地推送它们。主存储库中的引用也需要推送。

要克隆主存储库的所有子模块,您将必须执行以下操作:

git submodule update --init 

阅读7.11 Git Tools - Submodules了解详情。

另一种可能的解决方案是使用git子树。阅读Git subtree: the alternative to Git submodule

==编辑==

根据OP(Andrew Schott),Git子树最适合这种情况。

要添加子树:

git subtree add --prefix path/to/new/subtree url.git master --squash

要更新子树:

git subtree pull --prefix path/to/subtrree url.git master --squash