git 子模块没有推送到正确的 repo
git submodule not pushing into correct repo
我有一个存储库,我正在其中开发一些库,我生成了我想要的 /dist 文件夹,然后将其推送到另一个存储库,以便其他应用程序只能导入这个。
所以我读到将此 /dist 添加为子模块是一种方法。
我的主文件夹(包括我的 /src、package.json 等等)有一个像这样的遥控器:
MINGW64 ~/Documents/myapp-dw (master)
$ git remote -v
origin https://.../_git/myapp-dw (fetch)
origin https://.../_git/myapp-dw (push)
现在我添加一个子模块
$ git submodule add https://.../_git/myapp-dw-dist dist
并使用新模块的信息创建一个新的 .modules 文件。
接下来,我使用 npm 任务生成我的 dist 文件夹,并创建该文件夹,其中包含其余文件。
我这样做 git status
并且我看到文件夹 /dist 已被修改。
所以我去 /dist 然后 运行 git add .
和 git commit
接下来我从我的主文件夹执行 git push
并且 /dist 文件夹被推送到我的主存储库而不是我的 dist 存储库。
我在这里错过了什么?我认为这应该进入 myapp-dw-dist,因为我将它添加为不同的子模块。
编辑:为了以防万一,我不得不说,每次我重建我的 /dist 文件夹时,我都会完全删除该文件夹 (rimraf) 并重新创建它...我是否可能删除一些敏感信息git信息?我的印象是 git 只需要 .modules 文件。
调用$ git submodule add https://.../_git/myapp-dw-dist dist
后,应该已经存在一个新文件夹dist
。此文件夹中发生的所有内容(并且仅此文件夹中发生的内容)将被推送到 myapp-dw-dist
存储库。
但是,您可能没有注意到该目录,因为在您 运行 $ git submodule init
之前它是空的。这应该使 myapp-dw-dist
存储库中的所有文件都出现在里面。现在可以从该文件夹(即存储库).
中提交并推送 文件夹内的更改
在子模块中提交更改后,不要忘记在父存储库中提交子模块的更改状态。
有关子模块的更多文档,请参阅 here。
编辑:啊,问题来了!正如您在编辑中所说,当您删除 dist
文件夹时,您也会删除 dist/.git
文件夹。这是告诉 git 要推送到哪个存储库的文件夹。只要你的子模块中没有 .git
文件夹,git 就会认为它只是你父存储库中的另一个文件夹,并推送到其他所有内容被推送的地方。
您可以尝试只删除 dist
中的文件而不是整个文件夹,或者在每次更改后重新添加子模块(这听起来更容易出错)。
我有一个存储库,我正在其中开发一些库,我生成了我想要的 /dist 文件夹,然后将其推送到另一个存储库,以便其他应用程序只能导入这个。
所以我读到将此 /dist 添加为子模块是一种方法。
我的主文件夹(包括我的 /src、package.json 等等)有一个像这样的遥控器:
MINGW64 ~/Documents/myapp-dw (master)
$ git remote -v
origin https://.../_git/myapp-dw (fetch)
origin https://.../_git/myapp-dw (push)
现在我添加一个子模块
$ git submodule add https://.../_git/myapp-dw-dist dist
并使用新模块的信息创建一个新的 .modules 文件。
接下来,我使用 npm 任务生成我的 dist 文件夹,并创建该文件夹,其中包含其余文件。
我这样做 git status
并且我看到文件夹 /dist 已被修改。
所以我去 /dist 然后 运行 git add .
和 git commit
接下来我从我的主文件夹执行 git push
并且 /dist 文件夹被推送到我的主存储库而不是我的 dist 存储库。
我在这里错过了什么?我认为这应该进入 myapp-dw-dist,因为我将它添加为不同的子模块。
编辑:为了以防万一,我不得不说,每次我重建我的 /dist 文件夹时,我都会完全删除该文件夹 (rimraf) 并重新创建它...我是否可能删除一些敏感信息git信息?我的印象是 git 只需要 .modules 文件。
调用$ git submodule add https://.../_git/myapp-dw-dist dist
后,应该已经存在一个新文件夹dist
。此文件夹中发生的所有内容(并且仅此文件夹中发生的内容)将被推送到 myapp-dw-dist
存储库。
但是,您可能没有注意到该目录,因为在您 运行 $ git submodule init
之前它是空的。这应该使 myapp-dw-dist
存储库中的所有文件都出现在里面。现在可以从该文件夹(即存储库).
在子模块中提交更改后,不要忘记在父存储库中提交子模块的更改状态。
有关子模块的更多文档,请参阅 here。
编辑:啊,问题来了!正如您在编辑中所说,当您删除 dist
文件夹时,您也会删除 dist/.git
文件夹。这是告诉 git 要推送到哪个存储库的文件夹。只要你的子模块中没有 .git
文件夹,git 就会认为它只是你父存储库中的另一个文件夹,并推送到其他所有内容被推送的地方。
您可以尝试只删除 dist
中的文件而不是整个文件夹,或者在每次更改后重新添加子模块(这听起来更容易出错)。