所以我对整个git主题相当陌生。但我想做的是dotfiles在多台机器上同步。我知道那里有很多教程,并且我了解了基本概念。但我的问题更加具体。
首先,我正在使用 Windows(目前)和Vim. 最重要的是,我用它vundle来管理我的插件。现在插件就是git-repos它们本身了。该目录~/.vim(这是我想要同步的主存储库)包含它们。
所以我的问题是,如何初始化submodule现有存储库?
我现在得到的是一堆绿色文件夹,~/.vim/bundle/...它们代表其他存储库。该git status命令将它们报告为未跟踪的内容(不,这不是我.gitignore在做一些时髦的事情)。
如果您不熟悉绿色文件夹“现象” ,您可能想看看我的存储库。
PS 其中一个子文件夹显示“修改的内容”而不是“未跟踪的内容”,即使我没有碰它。我不知道为什么。
.gitmodules用于跟踪 git 存储库中的子模块的文件通常为每个子模块都有一个名称,如下所示:
[submodule "my-submodule"]
path = foo/bar/my-submodule
url = http://github.com/myuser/original-my-submodule
Run Code Online (Sandbox Code Playgroud)
但是,我也看到它是用子模块名称中重复的本地路径编写的:
[submodule "foo/bar/my-submodule"]
path = foo/bar/my-submodule
url = http://github.com/myuser/original-my-submodule
Run Code Online (Sandbox Code Playgroud)
我的一个存储库中同时拥有这两种样式,可能是偶然的,我不确定它们为什么不同。
我想确保我正确表达了这些内容。其中哪一个是“正确的”?有关系吗?子模块名称是否用于显示以外的其他用途?
我是一个 git 新手。我的 git 存储库包含子模块引用。我有一个接收后钩子可以将存储库内容检出到我的网络目录中:
#!/bin/sh
GIT_WORK_TREE=/home/www/hello_world_php git checkout -f
Run Code Online (Sandbox Code Playgroud)
(根据这篇博文。)
它工作正常,只是 www 目录中的子模块目录未填充。
怎么修?
我们有一个 git 超级项目,它有一个子模块。该子模块正在接受 gerrit 审查。
我们的问题是,当在子模块中审查更改时(即使正在审查的提交的子模块链接已在超级项目上提交),其他开发人员无法通过“git submodule update”检索它们,除非他们专门获取 refs/子模块中的更改/*。
我明确指出,我们需要其他开发人员能够签出子模块中仍在审查中的代码。所以等待代码合并并不是一个可行的选择。
有没有一种方法可以让开发人员通过超级项目上的“git submodule update”获得子模块中正在审查的更改,该超级项目的子模块链接指向正在审查的提交?
我尝试删除一个子模块,然后使用 git 1.8.5.2 将其添加回来。asub添加了一个子模块git submodule add -b master url_asub.git。我删除了子模块
git rm asub
Run Code Online (Sandbox Code Playgroud)
asub 目录消失了。然后,我尝试使用添加它的原始命令再次将其添加回来(以测试 1.8.5.2 中的子模块删除是否干净):
git submodule add -b master url_asub.git
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
A git directory for 'asub' is found locally with remote(s):
origin url_asub.git
If you want to reuse this local git directory instead of cloning again from
url_asub.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 …Run Code Online (Sandbox Code Playgroud) 我想克隆一个 git 存储库 [1],其中定义了一个子模块.gitmodules:
[submodule "PointInCircle"]
path = PointInCircle
url = https://github.com/midas-journal/midas-journal-843
Run Code Online (Sandbox Code Playgroud)
遵循这些问题[2-4],我尝试了:
$ git clone --recursive https://github.com/midas-journal/midas-journal-851
Run Code Online (Sandbox Code Playgroud)
如果我理解submodule正确(显然我没有理解),那么内部应该有一个midas-journal-851名为的目录PointInCircle,其中克隆了第二个存储库。但是,没有PointInCircle创建任何目录,并且据我所知,代码没有克隆到任何地方。为了更好地衡量,我也尝试过......
$ git submodule init
$ git submodule update
Run Code Online (Sandbox Code Playgroud)
...也...
$ git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
...和...
$ git submodule foreach --recursive git submodule update --init
Run Code Online (Sandbox Code Playgroud)
...在克隆的目录中。每个命令运行时都不向控制台打印任何内容,并且我在目录中没有看到任何更改。
有什么想法我做错了吗?
[1] https://github.com/midas-journal/midas-journal-851
[2]克隆包含所有子模块的 git 存储库
[3]如何“git clone”包括子模块?
[4] 'git 子模块更新 --init --recursive' VS 'git 子模块 foreach --recursive git 子模块更新 --init'
假设我有一个带有多个存储库的 git 服务器,并且其中一个存储库包含其他一些存储库作为子模块。是否可以镜像另一台服务器上的所有存储库并重定向子模块依赖项而不更改历史记录?
有一个名为 的 git 存储库parent-repo。它有lib包含库的文件夹。'lib/one' 受parent-repo. 现在我想让 git 识别lib/one为parent-repo.
cd lib/one
git init
git add .
git commit -m 'first commit'
Run Code Online (Sandbox Code Playgroud)
我认为下一步是
cd parent-repolib/onelib/one为子模块如果可能的话,请使用 git 命令清除后续步骤。
传递中的 Git 子模块对于使用不同的密码集非常有效。我唯一的问题是我无法git submodule通过 发出命令pass。
例如,
pass git submodule foreach git pull
Run Code Online (Sandbox Code Playgroud)
返回:
致命:如果没有工作树,则无法使用 /usr/local/Cellar/git/2.6.4/libexec/git-core/git-submodule 。
我正在使用 github,并且我的存储库中有子模块。但是,我希望能够单击 github 上的子模块来打开子模块存储库页面。这是我的 .gitmodules 文件。
[submodule "submodule1"]
path = submodule1
url = https://github.com/octocat/Hello-World
[submodule "submodule2"]
path = submodule2
url = https://github.com/octocat/hello-worId
[submodule "submodule3"]
path = submodule3
url = https://github.com/octocat/hello-worId
Run Code Online (Sandbox Code Playgroud)
我可以做些什么来让子模块在 github 上可点击吗?