Git push会自动更新所有子模块

时间:2018-01-31 12:27:19

标签: git

我在搜索时搜索并搜索了一个自动更新(同步)所有子模块的方法。

我有主项目,例如:test

另一个项目,例如: test1

内部测试我已经添加了'子模块名为test1 - >链接到外部项目 test1 。 好的,一切都很好。

所以我将克隆我的主项目TEST,它将带有test1子模块为空。我将运行import sys from PyQt4 import QtCore, QtGui from do import Ui_Dialog class MyApp(QtGui.QDialog, Ui_Dialog): def __init__(self, parent = None): QtGui.QDialog.__init__(self, parent) self.setupUi(self) self.OK.clicked.connect(self.handleButton) def handleButton(self): nume = "" prenume = "" mail = "" varsta = "" nume = self.line_nume.text() prenume = self.line_prenume.text() mail = self.line_mail.text() varsta = self.spin.value() print(nume, prenume, mail, varsta) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = MyApp() window.show() sys.exit(app.exec_()) git submodule init向我提供test1的最新信息。

一切都好!现在我在本地副本上有子模块test1的最新版本(文件/文件)。

现在,我在本地修改了test1中的内容,我想推送它。 当我在test1子模块上点击git submodule update --remote --recursive时,我有类似这样的内容:

Git branch -a

好的,我会结帐以掌握并合并主编号和修订号,以包含我的修改'在test1 master分支中。

所以我合并了,现在它要求我推动。好的,我会推的。 文件只在 test1 项目中更新(推送),我希望它们也能在test / test1子模块中自动更新......

我做错了吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定你对git子模块有多熟悉,所以我先解释一般行为,因为它对其他读者也有帮助。

您有两个单独的存储库,testtest1 test1被添加为test的子模块。

这会导致以下情况:

  • test了解test1
  • test1 了解test
  • 您和其他开发人员可以在未test1签出的情况下提交test
  • test1有自己的git历史记录和提交,在git status repo文件夹中运行test将显示与test1子文件夹中不同的重播。
  • 您不能一次提交两个repos并共享提交。

因此,为了更新子模块test1并在主仓库test中使用它,您必须执行以下步骤:

  1. 让您在子模块中调整提交。
    确保您位于子模块的文件夹中。
  2. 在主回购中运行git status 应该说modified: test1 (new commits)
  3. 在主回购test中提交并推送此修改。
  4. 进一步解释:

    • 您在步骤1中的提交仅调整test1回购的历史记录。
    • 由于它是test的子模块,因此主要仓库将显示本地修改,因为它会检查更改的内容。
    • 主回购test只有指向子模块test1的某个提交的指针。
    • 每当您更改子模块的HEAD时,本地指针都会更新。
    • 确保其他开发人员更新其指针(并更改其子模块的HEAD),您必须按下更新的指针,如步骤3中所述。

    希望这有帮助。

    更新:如果您已将子模块test1签出两次,例如在(a)test/test1和(b)test1-alone并修改(b),步骤略有不同:

    1. 抓取或拉取test/test1以获取test1-alone推送的更改。
    2. 确保test/test1的HEAD指向所需的提交。
    3. 在主回购中运行git status 应该说modified: test1 (new commits)
    4. 在主回购test中提交并推送此修改。
    5. 最后两步与上述步骤相同 一般来说:

      1. 调整子模块的HEAD(确保它指向推送的提交)。
      2. 在主回购中提交更新的指针。
      3. 更新2:如果您将子模块test1签出两次,例如在(a)test / test1和(b)test1-alone并对(a)进行修改,步骤略有不同:

        1. test/test1
        2. 中提交并推送您的更改 {li> fetchpull远程更改test1-alone

          这与子模块行为无关。这是完全相同的行为,就好像你会在两个不同的位置查看test1,例如folderA/test1和`fol​​derB / test1'