Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对git子模块进行更改,并保留更改_Git_Git Submodules - Fatal编程技术网

对git子模块进行更改,并保留更改

对git子模块进行更改,并保留更改,git,git-submodules,Git,Git Submodules,我已经将我的一个库的git子模块克隆到我正在进行的一个项目中。问题是,克隆后,我需要更改克隆子模块中的一些行,,但我不想将这些更改推送到原始存储库中 我希望这些变化留在超级项目中。这可能吗?我怎样才能做到这一点 编辑:正如@GoZoner所说,基本上是: git克隆foo cd-foo git子模块init git子模块更新 cd路径/到/子模块 git签出主机 更改子模块 git commit-am“某物” git push origin(超级项目) 然后,当我在另一台计算机上克隆超级项目时(

我已经将我的一个库的git子模块克隆到我正在进行的一个项目中。问题是,克隆后,我需要更改克隆子模块中的一些行,,但我不想将这些更改推送到原始存储库中

我希望这些变化留在超级项目中。这可能吗?我怎样才能做到这一点

编辑:正如@GoZoner所说,基本上是:

  • git克隆foo
  • cd-foo
  • git子模块init
  • git子模块更新
  • cd路径/到/子模块
  • git签出主机
  • 更改子模块
  • git commit-am“某物”
  • git push origin(超级项目)
    然后,当我在另一台计算机上克隆超级项目时(直到步骤4),我希望这些更改保存在超级项目中。

    您可以为您的更改签出单独的分支。别把那根树枝往上推。您确实希望推动的更改,请在原始分支之一上进行。把那根树枝合并到你不需要向上推的特殊树枝上。不要在您的特殊分支上做任何其他工作,因为这样您就必须以另一种方式合并。您可以这样做,但它会变得复杂。

    我认为您需要放松“不提交子模块”约束。有两种选择:

  • 将子模块更改提交到子模块分支。它是团队的分支,也是团队放置子模块更改的地方。当有人克隆超级项目并更新子模块时,他们会得到团队分支的内容
  • 克隆超级项目存储库旁边的子模块存储库,并初始化子模块以指向您的克隆。然后,当您将更改提交到子模块时,这些更改将提交到克隆。克隆超级项目的任何人都可以从您的子模块克隆中获取子模块内容

  • 否则,我看不到实现您愿望的方法。

    当您说“我希望这些更改保留在超级项目中”时,您的意思是:当有人执行“git clone foo;cd foo;git submodule init;git submodule update”他们应该有一个工作目录,其中包括我对克隆的子模块所做的更改?@GoZoner是-但是子模块中的更改不应该推送到其原始存储库。我会用你的评论来重组这个问题。对,我以为你是在问这个问题,我认为这是不可能的。Git专门标记包含子模块的目录,并且不会查看该目录以外的“本地”更改。如果我签出一个不推送到原始分支的其他分支,然后在那里提交,则当我克隆repo并初始化子模块时,引用将丢失。这是我发帖前试过的。一个遗漏的参考错误将出现,我将回到第1步,除非我遗漏了什么。你必须用准确的结构更新你的问题。对不起,这些其实是不错的选择。我无法实现我真正想做的,但这些都是可行的选择。我想对这些文件做的是更改路径,这是最基本的,但知道在某些情况下该怎么做仍然很好。我想我将来可能会使用选项2和一些difftools。谢谢我不明白“紧挨着”的意思。你能再详细一点吗?谢谢。@ywu他可能是想在同一个目录中克隆两个存储库。谢谢@Mit94的回复。我将其视为超级项目repo中子模块repo的副本(克隆)并随身携带。它不再是子模块了,因为选项2中对该repo的更改需要保存在超级项目repo中。@ywu他很可能建议您将子模块插入团队的版本控制中。它仍然是超级项目的一个子模块,但分叉回购现在是超级项目特有的,您可以随意更改它。如果您的团队不拥有子模块repo,那么这将是在子模块中创建分支的替代方案。但是,如果你想从主回购中获取更新,你仍然需要与冲突作斗争。