我得到了git子模块(一厢情愿的想法?),我想出更具体的问题,这是一个好兆头......
我试图找到超级项目引用的子模块的哪个版本,在.gitmodules和中.git/config,但是没有提到......
场景是我正在更改其根位置(从中导入它们)的子模块,然后将它们拉入"子模块化"的位置......
除了从超级项目中提交以将这些更改合并到超级项目仓库之外,我是否还需要git update注册新的拉入式子模块提交?
基本上问题是:
git submodule update只有当我第一次克隆超级项目时,或者每次拉动子模块(来自它自己的回购)后,我才需要" "吗?
谢谢
我的repo使用了Recurly-js的自定义版本,我使用这些说明https://devcenter.heroku.com/articles/git-submodules将其打包为子模块.但是,当我尝试部署时,我现在收到以下错误:
----> Heroku receiving push
-----> Git submodules detected, installing
Submodule 'recurly-js' (/app/tmp/repo.git/recurly-js) registered for path 'recurly-js'
Initialized empty Git repository in /tmp/build_3iacvn8h2rnha/recurly-js/.git/
fatal: '/app/tmp/repo.git/recurly-js' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
Clone of '/app/tmp/repo.git/recurly-js' into submodule path 'recurly-js' failed
! Heroku push rejected, Submodule install failed
Run Code Online (Sandbox Code Playgroud) 我们正在使用子模块,我们是git的新手.
我们经常看到子模块本身的合并冲突,没有文件冲突,只有子模块.输出中列出了多个版本git submodule summary.我们通过git add <submodule>在超级项目中运行来解决它们.
但是今天我们让开发人员在以这种方式解决冲突时失去了子模块的提交.
运行git add会选择远程版本吗?不应该合并子模块的内容吗?如果她在子模块中进行了更改并提交了它们(我看到了),那么为什么在执行拉动并解决冲突后该提交会消失?
我正在创建子模块时遇到这个git错误.我最初在命令中有一个错误的URL,现在任何其他运行都显示此错误.关于什么是错的任何想法?
$ git submodule add -f https://github.com/Shougo/vimproc.vim.git .vim/bundle/vimproc
Adding existing repo at '.vim/bundle/vimproc' to the index
fatal: Not a git repository: .vim/bundle/vimproc/../../../.git/modules/.vim/bundle/vimproc
Failed to add submodule '.vim/bundle/vimproc'
Run Code Online (Sandbox Code Playgroud) 据我所知,如果你在git中添加一个子模块,那么它指向该子模块中的某个提交.
是否有任何方法可以查看子模块指向哪个提交而不检查它?
我的用例是:我有一个包含子模块的 repo 的两个分支。我想设置这两个分支的自动集成。但是每当两个分支上都有子模块更新时,我的自动集成脚本就会因子模块冲突而失败。有没有办法让 git 在合并期间忽略子模块指针的变化?或者为merge=ours给定的子模块提供类似的东西?
我在上面的页面中尝试了像这样的子模块文件夹的合并策略(但它只适用于文件)
submodule-name merge=ours
Run Code Online (Sandbox Code Playgroud) 我已经在这几个小时了,虽然我有一种感觉,我很接近我似乎无法解决这个问题.
我正在尝试创建一个带有git存储库的脚本,将该存储库中的子模块更新为指定版本,并提交更改.
我可以找到存储库,获取子模块并检查我想要的提交.
我似乎无法添加更新的子模块哈希,所以我可以提交它.
repos = Repo('path/to/repos')
submodule = repos.submodule('submodule-name')
submodule.module().git.checkout('wanted commit')
diff = repos.index.diff(None)
Run Code Online (Sandbox Code Playgroud)
此时我可以看到子模块的变化.如果我检查sourcetree,我可以在'unstaged files'中看到更改的子模块.问题是,我不知道如何进行更改以便我可以提交.
repos.index.commit(''),它会创建一个空提交.repos.index.add([submodule.path])所有文件都会添加到存储库中,这肯定不是我想要的.repos.index.add([submodule]),似乎没有任何事情发生.我有一个由许多子模块组成的项目。然而,事后看来,其中一些子模块不应该是子模块,因为它们并不意味着或永远不会在另一个项目中使用,而且我偶尔会在它们之间传输代码。这个项目同时也是子模块中的实验,所以我对它有点疯狂。
我想知道是否有一种方法可以将子模块转换为常规目录,维护更改历史记录,但重写主项目的历史记录,以便将它们视为常规目录。
我看过有关子树合并的内容,但我希望有一种方法来重写提交,以便文件路径以子模块的路径为前缀。
“git Remote get-url origin”可用于获取远程位置。如何对所有子模块执行相同的操作?
git submodule update --remote
Run Code Online (Sandbox Code Playgroud)
上面的命令将子模块更新到最新提交,但是我想更新到特定提交(例如某些提交哈希)。如何实现这一目标?
git-submodules ×10
git ×9
merge ×2
conflict ×1
git-commit ×1
github ×1
gitpython ×1
heroku ×1
python ×1