标签: git-submodules

Git:合并和子模块

假设我在RepoX中有两个分支,叫做BranchA和BranchB.RepoX还有一个名为SubmoduleY的子模块.

BranchA在版本'abc'处具有SubmoduleY,BranchB在版本'def'处具有SubmoduleY.

假设我想将BranchA合并到BranchB中,但我想让BranchB的SubmoduleY指向其原始版本的'def'.我看到了几种方法:

方法1:

  1. Checkout BranchB.
  2. 将SubmoduleY移动到修订版'abc'以使实际合并无痛(我们现在不想在子模块级别进行任何合并).
  3. 为SubmoduleY提交新版本(我们不能让它为合并浮动).
  4. 将BranchA合并到BranchB中.解决任何冲突.
  5. 将SubmoduleY移回修订版'def'.
  6. 提交SubmoduleY的新修订版.
  7. 将更改推送到主仓库.

方法2:

与方法1相同,但不是执行步骤6,而是从第3步中重新定义并删除额外的子模块提交.

两者似乎都有令人讨厌的缺点:

方法1将两个额外的提交放入历史记录中.

方法2忘记了对子模块修订所做的任何更改,因为这些提交会被删除.因此,稍后的任何合并将不得不再次处理一些问题.

有没有更好的办法?

git merge git-submodules

12
推荐指数
1
解决办法
6423
查看次数

如何在Eclipse中为Android开发设置我的Git存储库?

我需要一些帮助才能使用Git/Eclipse正确版本化我的Android项目.
使用单个Android项目设置它没有问题.

但是,如果我将一个或多个第三方Android库添加到我的主项目(例如Facebook SDK),我试图弄清楚设置它的正确和正确的方法.

所以目前我git-submodules用来完成这个,这是我的目录结构:

/project/android-main.git
   +--- /project/android-main/facebook-sdk
Run Code Online (Sandbox Code Playgroud)

我facebook-sdk在我的android-main项目中添加了一个git-submodule .
在Eclipse工作区的android-main项目中,我看到了子文件夹' facebook-sdk'.

然后是kludge:
我必须从/project/android-main/facebook-sdk一个新项目中导入"现有项目" ,以便我可以从android-main项目中将该项目作为库引用.

最后,Eclipse工作区有三个对' facebook-sdk'的引用:

  1. 项目本身在工作区中.
  2. 因为我把它添加为git-submodule,它在android-main项目中显示为一个文件夹.
  3. 另一个文件夹' facebook_sdk_src'由android-main项目中的Android SDK插件创建.

如果我添加更多子模块,这似乎会混乱工作区和主项目.
我做得对吗?
有没有更好的方法将Android库用作Eclipse中的子模块?

eclipse git android git-submodules egit

12
推荐指数
1
解决办法
8830
查看次数

将git管理的子目录切换到子模块

我们曾经在一个Rails应用程序中有一个本地黑客的delayed_job,在vendor/plugins/delayed_job中.它作为一次性事件安装并在主应用程序仓库中检入git.

现在我们决定在github上fork delayed_job并用git子模块替换子目录,如下所述:

http://doblock.com/articles/using-git-submodules-to-manage-plugins-in-rails

在此之前,我只是删除了vendor/plugins/delayed_job,而没有将其检入.现在,尽管添加了子模块,主repo中的git status仍显示vendor/plugins/delayed_job中的新文件.

我们应该如何处理删除作为repo一部分的子目录并使其保存git子模块的情况?在将子模块克隆到其位置之前,我们是应该首先使用git rm删除它,还是更彻底地删除它?

git ruby-on-rails-plugins git-submodules

12
推荐指数
1
解决办法
2601
查看次数

子模块是私有Github存储库时git子模块的问题

我在Github上有一个私人仓库,里面有3个子模块,其中3个也是私有的.

我在我的EC2服务器上生成了4个SSH密钥,并将它们作为Github部署密钥应用到所有4个私有存储库.

我能够克隆主存储库,因为它识别SSH密钥.当我运行"git submodule update"时,它在私有repos上失败并出现以下错误:

错误:未找到存储库.致命:远程端意外挂断

如果我手动检查那些私有存储库它可以工作,但不是在使用git submodule命令时.任何的想法?这不完全支持吗?

git ssh github amazon-ec2 git-submodules

12
推荐指数
1
解决办法
6420
查看次数

git - 默认推送到--recurse-submodules = check

我总是忘记推子模块.有时我忘了补充--recurse-submodules=check到git push.更糟糕的是,我团队中的其他人也可能会这样做.git config我们可以设置一个选项来设置check默认值吗?

git git-submodules

12
推荐指数
2
解决办法
2123
查看次数

如何正确管理父目录忽略的子目录中的git repo作为自己的项目?

我希望将Vagrant用于laravel的开发项目.为了促进这项工作,我正在使用这个github项目,Laravel4-Vagrant.

vagrant配置作为git存储库进行管理.Vagrant设置的一部分有一个每个定义的www目录,/var/www一旦设置了服务器就会映射到该目录,这样您就可以直接使用来自主机虚拟机的guest虚拟机内的文件.但是,在这个www目录中有一个.gitignore文件.这很有意义,因为你想管理你的流浪汉设置,并从头开始使用你的应用程序开发等.

但是,您开始进行应用程序开发并将项目放在此www目录中.在git中管理这个项目会很好,然后你可以将你的应用程序部署到另一个Web服务器或新的vagrant安装.由于该.gitignore文件,无法在此目录中的文件上使用git,因为父级要忽略它.

我不确定git-submodules是否是正确的解决方案或其他一些特殊配置.


更一般地说:

如何为项目创建一个git repo,它忽略了一个子目录,但该子目录中的文件(被父项忽略)是在他们自己的git repo中管理的?

理想情况下,我应该能够将父母和孩子分开包装.

希望得到一些通用的解释和一些特定的帮助来设置上面列出的项目作为示例.


编辑:

对结构等没有实际要求,只要这两个项目可以在单独的回购中维护,并且可以一起部署或者一个部署(例如,我可以使用我自己的定制流浪者来设置另一个dev/prod环境或者我可以将laravel项目部署到其他地方的现有部署.我还会考虑其他易于协同工作的标准源版本控制系统.另外,如果最初的laravel repo是通过git安装的,它会有所不同吗?使用上面引用的模板github项目,它不会克隆初始安装的git repo,而是使用laravel安装程序.

git git-submodules vagrant

12
推荐指数
2
解决办法
4370
查看次数

把所有内容都存放在Git中,包括所有子模块?

当项目包含子模块时,您需要分别存储/取消暂存所有子模块.有没有办法用较少的动作来做到这一点?

这个链接可能有帮助:

简单的方法拉最新的所有子模块

它是关于"拉"命令,但有一些方法如何在所有子模块之间进行迭代.

git git-submodules

12
推荐指数
1
解决办法
6339
查看次数

Jenkins git子模块更新失败

我有一个git repo,它有一个子模块.两者都属于BitBucket的团队.我的jenkins机器是带有git插件的AWS windows服务器.我使用SSH密钥进行身份验证.我有三个詹金斯工作.一个克隆主要回购.这很成功.一个人自己克隆第二个回购(将用作子模块的回购).这也很成功.在我的第三个构建工作中,我告诉jenkins以递归方式更新子模块.这失败并说公钥错误.如果我可以自己克隆回购,那怎么可能呢?

控制台输出如下:

Started by user anonymous
Building on master in workspace C:\Program Files (x86)\Jenkins\jobs\MainRepo\workspace
Wiping out workspace first.
Cloning the remote Git repository
Cloning repository git@bitbucket.org:team/mainrepo.git
 > git.exe init C:\Program Files (x86)\Jenkins\jobs\mainrepo\workspace # timeout=10
Fetching upstream changes from git@bitbucket.org:team/mainrepo.git
 > git.exe --version # timeout=10
using GIT_SSH to set credentials 
 > git.exe -c core.askpass=true fetch --tags --progress git@bitbucket.org:team/mainrepo.git +refs/heads/*:refs/remotes/origin/*
 > git.exe config remote.origin.url git@bitbucket.org:team/mainrepo.git # timeout=10
 > git.exe config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git.exe config remote.origin.url git@bitbucket.org:team/mainrepo.git …
Run Code Online (Sandbox Code Playgroud)

git bitbucket git-submodules jenkins

12
推荐指数
3
解决办法
2万
查看次数

公共仓库中的私人文件夹(子模块)

我有一个公共存储库.在其中我想使用私有的子模块.如果我将这个子模块包含在我的公共仓库中,那么每个人都能看到该子模块的内容吗?

git github git-submodules

12
推荐指数
2
解决办法
3196
查看次数

使用Github组织插件在Jenkins中检出子模块

我有一个由Github组织插件创建的Jenkins构建工作.在Jenkinsfile此构建检出使用的代码checkout scm,这是很好,因为它无论是建设PR引起的变化或推到主分支时,计算出正确的分支/修订结帐.

我怎么能这样做:

node {
  checkout scm 
}
Run Code Online (Sandbox Code Playgroud)

结帐子模块?

git groovy git-submodules jenkins jenkins-pipeline

12
推荐指数
3
解决办法
2万
查看次数