用删除.git 文件夹的方式 迁移仓库,如果 A 仓库有子仓库 该咋做? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
amiwrong123

用删除.git 文件夹的方式 迁移仓库,如果 A 仓库有子仓库 该咋做?

  •  
  •   amiwrong123 Jan 22, 2024 1603 views
    This topic created in 826 days ago, the information mentioned may be changed or developed.

    A 仓库的某个分支,是我想要的。想把这个分支迁移到 一个全新的空白的 B 仓库里。

    https://blog.csdn.net/xiaozhang_man/article/details/121144024

    我是按照这个博客的方法进行的。

    但因为 A 仓库的这个分支有子仓库,所以在拉取 A 仓库时,我必须加--recursive 参数。

    • 然后删除.git 文件夹
    • git init
    • 尝试初始化子仓库,此时有点问题。.gitmoudles 文件,和那个子仓库(假设叫 ygh)的文件夹已经存在了。我以为直接执行:git submodule add url_of_ygh ygh就可以,结果提示 ygh already exiest and is not a valid git repo 。
    • 最后只好用笨方法,现手动删掉掉 ygh 文件夹,然后再执行git submodule add url_of_ygh ygh,此时 git status ,能看到.gitmoudles 文件和 ygh@rf43434 都在暂存区了。
    • 执行 git add . 添加其他所有文件
    • 执行 git commit -m "自定义注释"
    • git remote add origin B 仓库地址
    • git push -u origin master

    我想知道,关于子仓库的处理,我这里有更好的办法吗?因为我还需要手动删除

    7 replies    2024-01-22 20:50:57 +08:00
    breadykidliu
        1
    breadykidliu  
       Jan 22, 2024   2
    你删除了 git 文件夹,仓库的历史提交记录不是全没了吗?!这算什么迁移
    amiwrong123
        2
    amiwrong123  
    OP
       Jan 22, 2024
    @breadykidliu #1
    额,此时我的目的是 只想要代码,不想要那些 commit 信息。
    vueli
        3
    vueli  
       Jan 22, 2024
    我做过这种迁移的,A 仓库 clone 下来的时候 git submodule init && git submodule update 可以把子仓库更新过来,这样所有文件都在了,直接把文件拿过去就行了啊。 我前端是这样做的
    nothingistrue
        4
    nothingistrue  
       Jan 22, 2024
    首先,把 git-book 看熟悉了: https://git-scm.com/book/zh/v2
    nothingistrue
        5
    nothingistrue  
       Jan 22, 2024
    你其实只需要 git rebase -i 一个命令,就能清洗当前分支的全部历史。然后把其他分支、标签都删除了,再推送到一个空白仓库中。这样你就能完美把别人的一个分支迁移到自己的仓库中了。当然里面还隐藏了一个作者时间,不过这个也能改,稍微有点高级就不简单说了。
    amiwrong123
        6
    amiwrong123  
    OP
       Jan 22, 2024
    @vueli #3
    嗯嗯,但是在 B 仓库,对于这个子仓库里的东西,还是想以子仓库的形式来引用。

    你这个方法,不会是这样的吧:子仓库的东西确实会在 B 仓库里,但是在 B 仓库里 不再是子仓库的形式了。或者说,子仓库的东西就不能再更新了。
    amiwrong123
        7
    amiwrong123  
    OP
       Jan 22, 2024
    @nothingistrue #5
    “就能清洗当前分支的全部历史。然后把其他分支、标签都删除了”这些不会影响到 A 仓库的吗?或者说,这些操作 只是在操作本地的分支,没有影响到远端的东西。

    网上搜了下,是这个博客的步骤吗: https://blog.csdn.net/Tomoe20/article/details/135132893

    其中这步:git remote add last-repo <旧仓库地址> 有点难理解。在一个仓库里面,还可以设置另一个仓库的 url 呢

    ( PS:git 比较菜,还是要多看看你的发的 gitbook 才行呢,但还是想问)
    About     Help     Advertise     Blog     API     FAQ     Solana     1086 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 22:58 PVG 06:58 LAX 15:58 JFK 18:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86