V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
amiwrong123
V2EX  ›  程序员

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

  •  
  •   amiwrong123 · 96 天前 · 1091 次点击
    这是一个创建于 96 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    ( PS:git 比较菜,还是要多看看你的发的 gitbook 才行呢,但还是想问)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2728 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:50 · PVG 19:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.