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

使用Git子模块管理第三方依赖关系?,git,git-submodules,Git,Git Submodules,我目前正在运行一个测试,以了解Git子模块是如何工作的,希望可以使用它们来管理第三方依赖关系 在我的本地测试中,我有一个文件夹,其中包含我的主要Git repo。然后我有一个名为scripts的子文件夹,其中有一个子模块是为GitHub repo创建的 当我最初设置子模块时,我显然得到了第三方回购协议中的所有文件/文件夹,但我唯一感兴趣的文件是require.js文件(),我提交了我的更改,包括删除了所有冗余文件/文件夹,然后等待RequireJs对其代码进行更改 当更改发生时,我git拉入ed

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

在我的本地测试中,我有一个文件夹,其中包含我的主要Git repo。然后我有一个名为
scripts
的子文件夹,其中有一个子模块是为GitHub repo创建的

当我最初设置子模块时,我显然得到了第三方回购协议中的所有文件/文件夹,但我唯一感兴趣的文件是
require.js
文件(),我提交了我的更改,包括删除了所有冗余文件/文件夹,然后等待RequireJs对其代码进行更改

当更改发生时,我
git拉入
ed,似乎每个更改的文件都会被拉下来?即使在我的回购协议中,我已将其提交为已删除,但子模块似乎会不顾一切地删除任何已更改的文件,即使我显然不想要这些文件

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

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

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

确实如此:您的父回购仍然引用上游
jrburke/requirejs
repo,SHA1引用其全部内容

如果您确实希望将该回购协议的修改版本作为子模块进行管理,则需要:

  • 放弃回购协议
  • 将fork添加为子模块
  • 删除除一个文件外的所有文件
  • git在该子模块中提交,并推到您的fork
  • 添加一个名为“requirejs”的新远程设备,指向
    jrburke/requirejs
    repo
  • 返回父repo并再次提交(以记录子模块的新状态)
然后,在子模块中,您可以“
git fetch requirejs
”,只将您感兴趣的文件合并到您自己的版本,提交并将其推送到fork。
和往常一样,不要忘记回到你的父母回购协议,并再次承诺

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

确实如此:您的父回购仍然引用上游
jrburke/requirejs
repo,SHA1引用其全部内容

如果您确实希望将该回购协议的修改版本作为子模块进行管理,则需要:

  • 放弃回购协议
  • 将fork添加为子模块
  • 删除除一个文件外的所有文件
  • git在该子模块中提交,并推到您的fork
  • 添加一个名为“requirejs”的新远程设备,指向
    jrburke/requirejs
    repo
  • 返回父repo并再次提交(以记录子模块的新状态)
然后,在子模块中,您可以“
git fetch requirejs
”,只将您感兴趣的文件合并到您自己的版本,提交并将其推送到fork。

和往常一样,不要忘记返回到您的父回购协议,并再次提交。

感谢您提供的信息-我现在正在尝试这一点,但我对Git的更好之处还是相当陌生的。“获取”后,如何合并我感兴趣的单个文件
git merge require.js
?尝试过,但似乎什么都没做
git checkout requirejs/master/require.js
(文件
require.js
位于回购协议的根目录中)。没有显示任何错误,因此它看起来以某种方式成功了?但是如果我运行了
git status
我没有看到任何要提交的更新?@Integralist在签出之后,
require.js
的内容是否发生了变化?当你签出时,你已经在
master
上了吗?当我执行这个命令时,我在自己的“master”分支上。自从我最初使用fork之后,require.js已经有了更新project@Integralist奇怪的是,
require.js
应该已经更新了。感谢您提供的信息-我现在正在尝试这一点,但我对Git的细节还是相当陌生的。“获取”后,如何合并我感兴趣的单个文件
git merge require.js
?尝试过,但似乎什么都没做
git checkout requirejs/master/require.js
(文件
require.js
位于回购协议的根目录中)。没有显示任何错误,因此它看起来以某种方式成功了?但是如果我运行了
git status
我没有看到任何要提交的更新?@Integralist在签出之后,
require.js
的内容是否发生了变化?当你签出时,你已经在
master
上了吗?当我执行这个命令时,我在自己的“master”分支上。自从我最初使用fork之后,require.js已经有了更新project@Integralist奇怪,那么
require.js
应该已经更新了。的可能重复