我们正在将我们(巨大的)项目转移到git,我们正在考虑使用子模块.我们的计划是在超级项目中有三个不同的头:发布,稳定,最新.项目负责人将处理释放和稳定的分支机构.他们将根据需要移动子模块.
问题是"最新"头.我们希望超级项目"最新"头部跟踪所有子模块的主分支(自动).如果能够显示子模块的所有提交历史,那也很棒.
我看过gitslave,但它不是我们想要的.有什么建议?
git子模块是否有可能由其他几个git子模块组成,而超级git repo可以获取每个子模块的内容?
我尝试使用显而易见的/天真的方法来创建一个包含多个子模块的git repo.
然后将此git repo添加到另一个git repo作为子模块.
然后尝试从超级git仓库的根目录拉出git submodule init然后git submodule update.但这无法获取子子模块.
根据本指南,我试图让TravisCI自动部署我的Hakyll静态站点.
这是我的回购设置的方式.我有我的源代码分支,其中包含我的hakyll和markdown文件.它将html构建到_site目录中,该目录设置为子模块,链接到我的master分支.
我没有问题地构建网站,然后cd进入_site目录.但是,当我尝试git add ./*新生成的HTML文件时,我收到以下错误:
fatal: Pathspec './about.html' is in submodule '_site'
Run Code Online (Sandbox Code Playgroud)
当我尝试时git add --all,我收到此错误:
git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.
/home/travis/build.sh: line 245: 1566 Aborted git add --all
Run Code Online (Sandbox Code Playgroud)
造成这种情况的原因是什么,我该如何避免这种情况?
您可以在此处查看存储库.
我知道当你将一个子模块添加到git存储库时,它会跟踪由其sha1引用的该子模块的特定提交.
我试图找到存储此sha1值的位置.
在.gitmodules和.git/config文件只显示了子模块的路径,但不是的提交SHA1.
该混帐子模块(1)参考只讲一个的gitlink条目和gitmodules(5)参考不说这事,无论是.
有些人(我认为在1.6.x版本附近)git意识到了子模块内部的变化.那只会让我烦恼:
$ git status vendor | grep modified: # modified: vendor/rails (modified content)
$ git diff vendor/ diff --git a/vendor/rails b/vendor/rails --- a/vendor/rails +++ b/vendor/rails @@ -1 +1 @@ -Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f +Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f-dirty
请停止?
好的,我有答案.现在我有另一个问题:
我可以把它放进去~/.gitconfig吗?从我最初看起来我不能,并且我没有看到任何有希望通过略读补丁.(我想我仍然可以做别名.)
我在https://github.com/aikiframework/json上有一个回购.在我的本地副本上,我使用该命令添加了一个子模块
git submodule add git@github.com:jcubic/json-rpc.git json-rpc
Run Code Online (Sandbox Code Playgroud)
然后我做了一个提交和推送,更改出现在GitHub上(我可以点击它).但是当我克隆回购时
git clone https://github.com/aikiframework/json.git
Run Code Online (Sandbox Code Playgroud)
子模块文件夹json-rpc为空.
我在这里错过了什么?我忘记了什么吗?为什么那个文件夹是空的?
如果我修改子模块,我可以将提交推回到子模块源,还是需要克隆?如果克隆,我可以将克隆存储在另一个存储库中吗?
我试图几个子模块添加到我的.vim/bundles目录,当我尝试添加这种特殊的回购Git的给了我一个奇怪的错误,我以前从未见过:
$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'
Run Code Online (Sandbox Code Playgroud)
知道是什么原因引起的吗?
如果我将相同的repo克隆到测试目录(而不是通过submodule命令),它可以正常工作,并创建预期的文件.
几个月前我开始了一个项目,并将所有内容存储在主目录中.在我的主目录"Project"中有几个包含不同内容的子目录:Project/paper包含用LaTeX Project/sourcecode/RailsApp编写的文档包含我的rails应用程序.
"Project"是GITified,"paper"和"RailsApp"目录中都有很多提交.现在,因为我想使用cruisecontrol.rb作为我的"RailsApp",我想知道是否有办法在不丢失历史的情况下从"RailsApp"中创建一个子模块.