使用Git子模块管理第三方依赖?

时间:2012-08-02 17:10:12

标签: git git-submodules

我目前正在运行测试,以了解Git子模块是如何工作的,希望我可以使用它们来管理第三方依赖项。

在我的本地测试中,我有一个包含我的主要Git仓库的文件夹。然后我有一个名为scripts的子文件夹,它有一个为GitHub仓库创建的子模块https://github.com/jrburke/requirejs/

当我最初设置子模块时,我显然得到了第三方存储库中的所有文件/文件夹,但我唯一感兴趣的文件是require.js文件(https://github.com/jrburke/requirejs/blob/master/require.js)我提交了我的更改包括删除所有冗余文件/文件夹,然后等待RequireJs对其代码进行更改。

当更改发生时,我git pull编辑并且似乎每个更改的文件都会被删除?即使在我的回购中我已将它们作为已删除提交,但似乎子模块无论如何都会删除任何已更改的文件,即使我显然不想要它们。

这就是问题所在。第二个问题是我然后再次删除文件并转到提交但由于合并问题我无法提交?但我无法合并它们,因为我删除了它们!我以前见过这个,显然解决方案是进入一个特定的.git文件夹并删除文件,以便它们无法被引用,但这似乎是管理第三方依赖项的很多工作?

我只想克隆一个回购,删除任何我不想要的文件,并在听到第三方代码更新时运行git pull。有没有办法实现这一点,简单?

1 个答案:

答案 0 :(得分:0)

  

当改变发生时我git拉了进来似乎每个文件都会被拉下来?

确实如此:您的父代仓库仍然引用了上游jrburke/requirejs仓库,其中SHA1引用了其全部内容。

如果您真的想将该repo的修改版本作为子模块进行管理,则需要:

  • fork the repo
  • 将您的前叉添加为子模块
  • 删除所有文件,但只删除一个
  • git在该子模块中提交,并推送到您的fork
  • 添加为名为'requirejs'的新远程,指向jrburke/requirejs repo
  • 返回您的父级仓库并再次提交(记录子模块的新状态)

然后,在子模块中,您可以'git fetch requirejs',仅将您感兴趣的文件合并到您自己的版本,提交并将其推送到您的分叉。
与往常一样,不要忘记回到您的父回购,然后再次提交。