gpt4 book ai didi

git - 如何将已克隆的项目添加为子模块?

转载 作者:太空狗 更新时间:2023-10-29 12:58:14 26 4
gpt4 key购买 nike

我在一个文件夹中有大量我克隆了很长时间的项目;最近我将整个文件夹移动到我的一个存储库中,并想将这些克隆的项目转换为子模块,以便我将来可以更好地更新和控制。我在谷歌上搜索了很多关于如何做到这一点的内容,但所有教程都只讨论如何添加新的子模块。谁能帮帮我?

最佳答案

将现有的 git 存储库添加为子模块与添加新的相同。

  1. 首先使用 git init 将包含所有 git 存储库的文件夹本身作为一个 git 存储库。
  2. 使用 git submodule add https//example.com/remoterepo ./localrepo,其中 ./localrepo 是您现有的 git 存储库。
    • 注意:您可以从 localrepo/.git/config 获取 remoterepo 的 URL。
  3. 对要添加为子模块的所有现有存储库重复第二步。
  4. 现在您可以运行 git submodule foreach git pull 来更新您的所有子项目。

如果您有很多子模块,您可能需要编写一个小脚本来自动执行第二步,这应该不难。

编辑

以下是我用来重现评论中提到的错误的内容。我对命令进行了三次检查,仍然看不到错误:

git --version

mkdir submoduletest
cd submoduletest

git init --bare remote_repo_A
git init --bare remote_repo_B

git clone remote_repo_A local_repo_A
git clone remote_repo_B local_repo_B

cd local_repo_A
echo "test commit on repo B" >> test.txt
git add test.txt
git commit -m 'test commit message'
git push origin master

cd ../local_repo_B
echo "test commit on repo B" >> test.txt
git add test.txt
git commit -m 'test commit message'
git push origin master

cd ../local_repo_A
git clone ../remote_repo_B local_repo_B
git submodule add ../remote_repo_B ./local_repo_B
git submodule foreach git pull origin master

git add .
git ci -m 'we just added a submodule for remote_repo_B'

git submodule status

使用以下命令检查 local_repo_A 的当前状态,它只有两个 blob 对象,一个用于“test.txt”,另一个用于隐式创建的“.gitmodules”文件,remote_repo_B 被添加到 local_repo_Aindex

find .git/objects -type f | awk -F/ '{print $3$4}' | xargs -I {} git cat-file -t {} | grep blob

我回滚编辑的原因是因为编辑是错误的,它已经被另外两个调解员拒绝和我,但后来其他人批准了它,我不确定它是否是 SO 的错误还是什么。但是编辑被拒绝了,即使是现在,因为它是完全错误的,我已经在评论中解释了为什么,我没有冒犯任何人,但这浪费了我的时间,如果答案没有帮助,请投反对票你。

再次重申,如果您没有改进它,请不要编辑我的答案。

关于git - 如何将已克隆的项目添加为子模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com