2

我目前正在运行测试以查看 Git 子模块如何工作,希望我可以使用它们来管理 3rd 方依赖项。

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

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

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

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

我只想克隆一个 repo,删除任何我不想要的文件,并git pull在我听到关于 3rd 方代码的更新时运行。有什么方法可以实现这一点吗?

4

1 回答 1

0

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

当然可以:您的父仓库仍然引用上游jrburke/requirejs仓库的 SHA1 引用其全部内容。

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

  • 分叉那个回购
  • 将你的 fork 添加为子模块
  • 删除除一个以外的所有文件
  • git commit 在那个子模块中,然后推送到你的 fork
  • 添加为名为“requirejs”的新远程,指向jrburke/requirejsrepo
  • 回到你的父仓库并再次提交(记录你的子模块的新状态)

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

于 2012-08-03T06:15:35.783 回答