是否有可能让Git知道现有的.gitmodules文件?

Pab*_* C. 14 git git-submodules

我添加了一个子模块:

git submodule add git://github.com/chneukirchen/rack.git rack
Run Code Online (Sandbox Code Playgroud)

.gitmodules创建的文件如下:

[submodule "rack"]
path = rack
url = git://github.com/chneukirchen/rack.git
Run Code Online (Sandbox Code Playgroud)

当然Git知道它:

git submodule status
30fb044db6ba5ea874ebc44a43bbd80a42676405 rack (1.3.0-64-g30fb044)
Run Code Online (Sandbox Code Playgroud)

我手动添加了一个子模块,例如,添加到该文件:

[submodule "redcloth"]
path = plugins/redcloth
url = git://github.com/jgarber/redcloth.git
Run Code Online (Sandbox Code Playgroud)

我重复了上一个命令:

git submodule init
Submodule 'rack' () registered for path 'rack'

git submodule update
(no output)

git submodule status
30fb044db6ba5ea874ebc44a43bbd80a42676405 rack (1.3.0-64-g30fb044)
Run Code Online (Sandbox Code Playgroud)

所以,就我所知,我手工添加的东西被忽略了.有没有办法让Git知道.gitmodules文件中手工添加的行?

注意:我还试图手动将这些行添加到.git/config文件中,但这也不起作用.

Pab*_* C. 17

好的,所以多亏了亚当我找到了答案,有点显而易见但是,不过,这里是:

如果你检查了什么git submodule add,你会注意到它做了三件事:

  1. 将行添加到.gitmodules文件中,
  2. 在命令中确定的'path'中克隆repo,和
  3. 将模块添加到.git/config文件中.

因此,基本上手动添加子模块的repo和通过git submodule命令添加的子模块之间的唯一区别是repo本身的内容.

回答相同的例子,你应该:

$ git clone git://github.com/jgarber/redcloth.git plugins/redcloth
Run Code Online (Sandbox Code Playgroud)

将以下内容添加到.git/config文件*:

[submodule "redcloth"]
url = git://github.com/jgarber/redcloth.git
Run Code Online (Sandbox Code Playgroud)

确保至少将它们添加到git仓库:

$ git add plugins/redcloth
Run Code Online (Sandbox Code Playgroud)

然后检查git是否真的"知道":

$ git submodule status
0766810ab46f1ed12817c48746e867775609bde8 plugins/redcloth (v4.2.8)
30fb044db6ba5ea874ebc44a43bbd80a42676405 rack (1.3.0-64-g30fb044)
Run Code Online (Sandbox Code Playgroud)

*请注意,该.gitmodules文件中不需要您在文件中使用的"path"变量


Ada*_*ruk 3

你需要跑

git submodule update --init --recursive 
Run Code Online (Sandbox Code Playgroud)

更新:

submodule add 命令实际上克隆了整个存储库并将 sha1 添加到索引中。

与以前版本的 git 相比,这可能是新行为,克隆并未立即完成。

如果索引中没有将模块指向特定提交的条目,则 git submodule update 将拒绝执行任何操作。这似乎是新行为。

希望这可以帮助。

  • 这不起作用......它仍然没有检测到手工制作的子模块。 (4认同)