gpt4 book ai didi

git - 正确推送 git 子模块

转载 作者:行者123 更新时间:2023-12-04 18:08:33 24 4
gpt4 key购买 nike

我有以下存储库布局:

Repo
|-- Folder1
| |-- file1
| |-- file2
| ...
|-- Folder2
| |-- file3
| |-- file4
| ...
|-- file5
|-- file6
...

其中“Repo”是主存储库,“Folder1”和“Folder2”是两个子模块。

使用根目录(示例中的 file5、file6)很简单,但我对如何正确地将您修改的项目推送到子模块中有疑问。

现在我正在编辑每个子模块中的文件,提交每个更改并将其推送到本地:

[Repo]$ cd Folder1
[Folder1]$ vi file1
... do some changes ...
[Folder1]$ git add file1
[Folder1]$ git commit -m "Some changes"
[Folder1]$ git push

如果我直接检查子模块的 git 状态,它会输出它是最新的:

[Folder1]$ git status
# On branch master
nothing to commit, working directory clean

但是如果我检查根文件夹中的状态,它告诉我我已经推送的子模块有新的提交。

[Folder1]$ cd ..
[Repo]$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Folder1 (new commits)
#
no changes added to commit (use "git add" and/or "git commit -a")

如果我错了请纠正我,但我想以上是由于 git 检查当前本地 repo 提交 ID 与我推送到的 git 服务器中的信息。所以,我现在实际做的是提交所有内容并将其推送到主仓库中。这是使用子模块的正确方法吗?

最佳答案

[Repo]$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Folder1 (new commits)
#
no changes added to commit (use "git add" and/or "git commit -a")

以上是由于父存储库 Repo 指向 Folder1 子模块的旧提交。

对于您的另一个问题,是的,这是使用子模块的正确方法。

  1. 提交子模块。
  2. 推送子模块。
  3. 在父存储库中提交。
  4. 推送父存储库。

通过这种方式,您不会冒推送悬空子模块引用的风险,即父存储库中的引用对子模块中尚未推送的提交的引用。

请注意,在父存储库中,提交和推送每个子模块更新并不是强制性的。其他用户可以在子模块的 master 分支中工作,并执行标准的 git fetch/git pull 来下载新的修订版。

我个人只在要发布该子模块的新版本时提交对该子模块的引用,以在父存储库中标记该版本。我的子模块是应用程序,父存储库是共享库。

关于git - 正确推送 git 子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com