我们正在将我们(巨大的)项目转移到git,我们正在考虑使用子模块.我们的计划是在超级项目中有三个不同的头:发布,稳定,最新.项目负责人将处理释放和稳定的分支机构.他们将根据需要移动子模块.
问题是"最新"头.我们希望超级项目"最新"头部跟踪所有子模块的主分支(自动).如果能够显示子模块的所有提交历史,那也很棒.
我看过gitslave,但它不是我们想要的.有什么建议?
我有两个或更多的项目(我们称之为ProjectFoo和ProjectBar),它们有一些我放在子模块中的公共代码.
我的理解是,如果我从ProjectFoo中提交子模块的更改,它将处于一个独立的头部,只有所有ProjectFoo克隆才能看到:
(master) $ cd ProjectFooBarCommoneSubmodule/
(master) $ git commit -am "Common code fix."
(56f21fb0...) $ git push
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)
这可能是因为master分支没有改变.我可能会做类似的事情git checkout master && git merge Everything up-to-date但看起来很难看.可能git reset --hard master会做同样的事情,但似乎更加丑陋.
如何使用项目共享的公共代码,从使用它的那些项目中更新?换句话说,提交到该子模块应该更新使用同一子模块的所有各种存储库(存储库,而不仅仅是克隆).
----编辑----
可见我的签出存储库搞砸了并且坏了.它应该从一开始就像那样(在本例中的ProjectFoo上):
(master) $ cd ProjectFooBarCommoneSubmodule/
(master) $ git commit -am "Common code fix."
(master) $ git push
....
fbfdd71..0acce63 master -> master
(master) $ …Run Code Online (Sandbox Code Playgroud) 有很多网页在那里暗示让svn外部看起来像git子模块的hackish方法.我已经读过一些关于差异的说法,但这似乎不是很基础:
Git子模块链接到另一个项目的存储库中的特定提交,而svn:externals总是获取最新的修订.
为什么这种差异会使它们根本不相容?我们可以假设没有合理的默认值,例如大多数svn:externals指向永不移动的标签吗?
我想做一些事情,最好在我发现的邮件列表帖子中描述:
git Archives:GIT覆盖存储库(unsw.edu.au)
从两个存储库开始,我们称之为Repo-A和Repo-B.Repo-A托管在某个服务器上,包含大量代码(假设它是一个内核源代码库).Repo-B只是在Repo-A已经提供的东西之上添加了少量的回购(为了论证,比如IPW2100和IPW2200项目).
由于几个原因,我们希望用户能够从我这里获得Repo-A和Repo-B之间的差异.
例如,用户获得完整的Repo-A:[...]
,然后仅覆盖他们从我那里获得的delta:[...]
问题是,我只是找不到任何其他对这个概念的引用(令人沮丧的是搜索努力的另一件事是Gentoo在其包管理器中有一个叫做"git overlays"的东西;而TortoiseGIT有"叠加"图标).线程本身似乎只有一个回复,是从2005年开始,它建议引入" ancestors存储在覆盖存储库中的文件",这可能从未实现过git.虽然该帖子实际上包含用于演示概念的bash脚本,但它们基于rsync-ing iningals .git直接,我对测试并不十分自信.
我的问题是 - 是否有一种标准方式(例如,主要使用git可在上下文中调用的命令或shell脚本git),在这种方式中可以实现这种操作?或者,是否有一些我可以在Linux下使用的"文件系统覆盖"技巧,以实现这种效果?
我认为git可以使用子模块,但显然他们不能; 我准备了一个小脚bash本来测试:
#!/usr/bin/env bash
set -x
rm -rf repoM-git
mkdir repoM-git
cd repoM-git
git init
git config user.name "me"
git config user.email "my@self.com"
git submodule add https://github.com/defunkt/github-gem.git repo1
git submodule add https://gist.github.com/6462971.git repo2
git status
git commit -m "initial checkin"
cd repo1
git config user.name "me"
git config user.email "my@self.com"
SOMETAG=$(git …Run Code Online (Sandbox Code Playgroud) 完成问题重写
所以我认为我非常简单直接地解释了这个问题,但似乎我过于简单了,所以这里是所有额外的细节.希望这有助于每个人看到这也不是重复.
我有一个存储库(项目),我希望自动化将提交从分支中的一个目录推送到另一个分支的过程; 我还没有遇到过的东西.
这是我的项目的完整结构:
[PROJECT MASTER BRANCH]
|- gh-pages (directory)
|- css (directory)
|- index.html (file)
|- readme.md (file)
[PROJECT gh-pages BRANCH]
|- (empty at the moment)
Run Code Online (Sandbox Code Playgroud)
我希望做的是创建一个钩子,它将从主分支中自动处理我的gh-pages目录中的更改,并通过gh-pages分支复制/克隆/替换它们(无论哪个术语使用正确),项目网站分支.这是一个省略所有其他文件的示例:
[PROJECT MASTER BRANCH]
|- gh-pages (directory) <=== SEE UPDATE BELOW [A]
| |- css (directory)
| | |- style.css (file)
| |- index.html (file)
[PROJECT gh-pages BRANCH]
|- css (directory) <=== SEE UPDATE BELOW [B]
| |- style.css (file)
|- index.html (file)
Run Code Online (Sandbox Code Playgroud)
我对这个级别的Git Hub完全陌生.我通常只是坚持基础,从不使用终端/外壳.总而言之,为了澄清我希望做的事情,我想:
这是我尝试使用的一些post-receive钩子代码(我是通过研究一些东西来实现的)但它不起作用: …
我在Git下有我的WordPress项目,并将WordPress作为子模块.我想将我的主题开发保存在一个单独的子模块中,但是在当前设置中并且在将主题设置作为子模块时遇到一些困难.
这是我的文件系统:
/.git (master repo)
/index.php
/wp-config.php
/wordpress (WordPress repo as a submodule)
/wp-content
themes
test-theme (theme repo)
.git
index.php
(etc...)
Run Code Online (Sandbox Code Playgroud)
现在,当我将我的主仓库推送到github,并尝试在另一台机器上克隆它时,wordpress子模块下载正常,但我的主题文件夹没有,我得到一个关于未定义子模块的错误.
我尝试使用它将我的主题添加为子模块:
git submodule add ./wp-content/themes/test-theme/.git ./wp-content/themes/test-theme
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:"remote(origin)没有在.git/config中定义的url"
如何将主题回购定义为子模块,当它基本上托管在项目"内部"而不是在线上的单独存储库中时?
谢谢.