我的主git repo中有一个git子模块.据我了解,主repo存储一个SHA值(某处......),指向它"链接到"的子模块的特定提交.
我进入了我的子模块并输入了git checkout some_other_branch.我不知道我来自哪个承诺.
我想恢复该指针,以便主repo和子模块再次同步.
我的第一个(可能是天真的)本能就是说git reset --hard- 这似乎适用于其他一切.令我惊讶的是,它不适合这种情况.
所以我发现我可以输入git diff,注意子模块指针曾经拥有的SHA ID,然后进入子模块并且git checkout [SHA ID]...但是肯定必须有一个更简单的方法吗?
由于我还在学习git子模块,如果有关于我不知道的概念的话,请随时更正我的术语.
我继承了一个包含多个项目的git存储库.我想将存储库拆分为新的单个存储库,每个项目一个,然后让主存储库将项目作为子模块包含在内.如果可能的话,我想在保持各个项目的修订历史的同时完成所有这些工作.
我可以为每个项目克隆存储库并每次删除所有其他项目,但是有更好的方法可以避免在每个新项目存储库中都有克隆历史记录吗?
我有一个引用多个子模块的git超级项目,我试图锁定其他项目成员的工作流程.
对于这个问题,让我说我的超级项目被调用supery并且子模块被调用subby.(然后是我正在尝试做的简化......我实际上并没有使用分支版本,但我认为最简单的问题是布局.)
我的主分支supery具有作为子模块引用v1.0的git项目的subby标记.的分支supery叫one.one,改变了子模块的引用指向该标记v1.1的subby.
我可以毫不费力地在每个分支中工作,但如果我尝试使用one.one分支更改来更新分支,master我会收到一些冲突,而我不知道如何解决它们.
基本上在分支中运行一段git pull . master时间之后subby,看起来它会创建其他子模块.
在拉/合并之前,我git submodule从one.one分支获得了所需的响应:
$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)
Run Code Online (Sandbox Code Playgroud)
但是在拉动之后,它会在我运行时添加额外的子模块git submodule:
$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e …Run Code Online (Sandbox Code Playgroud) 通常情况下,您正在编写某种类型的项目,过了一段时间后,很明显项目的某些组件实际上可用作独立组件(可能是库).如果您从早期开始就有这个想法,那么大部分代码都存在于自己的文件夹中.
有没有办法将git项目的子目录之一转换为子模块?理想情况下会发生这样的情况,即该目录中的所有代码都从父项目中删除,并且子模块项目被添加到其中,具有所有适当的历史记录,并且所有父项目提交都指向正确的子模块提交.
这是我.gitmodules文件内容的一部分:
[submodule "src/static_management"]
path = src/static_management
url = git://github.com/eykd/django-static-management.git
[submodule "external/pyfacebook"]
path = external/pyfacebook
url = http://github.com/sciyoshi/pyfacebook.git
Run Code Online (Sandbox Code Playgroud)
但是,.git/config只包含第一个:
[submodule "src/static_management"]
url = git://github.com/eykd/django-static-management.git
Run Code Online (Sandbox Code Playgroud)
第二个子模块(external/pyfacebook)由功能分支中的另一个开发人员添加.我现在继承了开发,并检查了功能分支.但是,Git不会为我拉这个子模块.我试过了:
git submodule initgit submodule updategit submodule update --initgit submodule sync.git/config并运行git submodule init.它只复制先前存在的子模块并忽略新的子模块..git/config手动输入新的子模块定义并运行git submodule update.只有以前存在的子模块才能更新.在各种组合中,但是git根本不会.git/config根据新内容进行更新.gitmodules,也不会创建external/pyfacebook文件夹并拉出子模块的内容.
我错过了什么?手动干预(手动添加子模块条目.git/config)是否真正需要,为什么?
编辑:手动干预不起作用.手动添加新的子模块条目.git/config不会做任何事情.新的子模块被忽略.
浏览SubModule教程,我从boto项目中创建了一个子模块.然后,我发现我实际上只需要这个项目的一个子集 - 特别是boto文件夹.
我想更改我的子模块以指向此文件夹.当我查看.gitmodules时,我明白了
[submodule "backup/src/boto"]
path = backup/src/boto
url = https://github.com/boto/boto.git
Run Code Online (Sandbox Code Playgroud)
我应该使用什么URL而不是https://github.com/boto/boto.git?更改URL后,我应该在本地删除boto文件夹并重新拉出吗?
如何用不同的git repo替换git子模块?
具体来说,我有一个子模块:
./ExternalFrameworks/TestFramework那个点到git repogit@github.com:userA/TestFramework.git git@github.com:userB/TestFramework.git.问题是当我用这里描述的方法删除子模块时,然后使用该命令重新添加它
git submodule add git@github.com:userB/TestFramework.git
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
origin git@github.com:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
git@github.com:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
Run Code Online (Sandbox Code Playgroud) 好.所以我以为我有这个舔...但现在....
我有一个项目,其中包括一个来自GitHub的小型库作为子模块.在该超级项目的原始版本中,子模块按预期工作.
但是,我只是克隆了超级项目,做了我认为应该做的事情:"git submodule init",得到子模块的目录,但它是空的.
如果我现在尝试做
git submodule update
Run Code Online (Sandbox Code Playgroud)
我明白了
fatal: Needed a single revision
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'
Run Code Online (Sandbox Code Playgroud)
如果我试试
git submodule foreach git pull
Run Code Online (Sandbox Code Playgroud)
我明白了
Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.
Run Code Online (Sandbox Code Playgroud)
在我的.git/config中,我有这个:
[submodule "external_libraries/BEACHhtml"]
url = git@github.com:interstar/BEACHhtml.git
Run Code Online (Sandbox Code Playgroud)
在我的.gitmodules中我有这个:
[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git
Run Code Online (Sandbox Code Playgroud)
任何人都知道缺少什么?
对于Mac上的git版本1.9.3(Apple Git-50)如何删除git子模块?我正在阅读很多过时的信息,许多开发人员告诉我他们不会工作.目前的方式是什么?会git deinit pathToSubModule 做的伎俩?
我认为可行的步骤在这里,但评论说他们不会.
让我解释一下我目前的情况以及我需要完成的工作.我已经安装了快速存储库并将其添加到我的项目的子模块中.此代码已经签入,其他人正在使用它.我现在需要做的是分叉相同的Quick存储库并将其托管在我公司拥有的更安全的github上(所以完全是其他私有github).在分叉之后我想将该fork添加为gitSubmodule并让它替换我之前安装的当前Quick子模块.
更新:我已经读过以下是关于最新git版本的正确方法请确认一下?
To remove a submodule added using:
git submodule add blah@blah.com:repos/blah.git lib/blah
Run:
git rm lib/blah
That's it.
For old versions of git (circa ~1.8.5) use:
git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah
Run Code Online (Sandbox Code Playgroud)