将存储库的所有内容传输到另一个现有存储库的目录中

将存储库的所有内容传输到另一个现有存储库的目录中

我有一个 GitHub 存储库 (X),我想将其所有文件移动到另一个现有 GitHub 存储库 (Y) 的目录中,就像mv ${HOME}/x/* ${HOME}/y/xLinux 文件树中的常规文件一样。

  • 在这种特殊情况下,我不关心文件的 Git 历史记录,我只想要文件本身
  • 如果我创建一个包含第一个存储库的所有文件的 zip 文件并将其上传到第二个存储库,目前 GitHub 没有给我一个选项提炼放在相关目录下

如何将存储库中的所有文件移动到另一个现有存储库的目录中?

答案1

没有内置的概念移动存储库之间的文件。你可以复制文件,如果您愿意,可以单独将它们从旧存储库中删除。

假设您要将文件从master的分支移动https://github.com/roiko/xmain的分支https://github.com/roiko/y,并且要移动该目录下的文件subdir

这是移动文件并保留其历史记录的方法。历史记录会将文件记录为位于根目录下,然后移至根目录下subdir并“导入”。也可以将文件记录为始终位于 下subdir,但需要额外的工具。警告:未经测试的代码。

  1. 制作工作副本,其中 x 和 y 都可用作遥控器

    git clone https://github.com/roiko/y
    cd y
    git remote add x https://github.com/roiko/x
    git fetch x
    
  2. 将旧存储库中的文件移至子目录。我假设 subdir 中尚不存在x。我们将创建一个临时的本地分支机构x-move来进行迁移。它从 开始x/master并添加一个移动提交。

    git checkout -b x-move x/master
    mkdir subdir
    shopt -s extglob dotglob
    git mv -- !(.git|subdir) subdir/
    git commit -m 'Move everything to subdir/'
    

    shopt命令适用于 bash。在 zsh 中,请改用setopt kshglob dotglob

  3. 将移动的文件导入到y.这意味着创建一个本地分支来处理 的内容y,并合并x-move我们在上一步中创建的分支。

    git checkout -b main y/main
    git merge x-move
    git commit -m 'Import files from roiko/x under subdir'
    
  4. 推动结果。

    git push origin
    
  5. (可选)删除x存储库。其分支的所有内容和历史记录master现在都记录在 中y,但其他分支、问题等则没有记录。

答案2

如果您不关心保留 的历史记录x,可以按以下方法将其移至y

  1. 克隆两个项目

    git clone https://github.com/roiko/x
    git clone https://github.com/roiko/y
    
  2. 全部复制xy

    cp -a x y/
    
  3. 创建包含所有复制数据的提交

    cd y
    git add x
    git commit -m "Import files from roiko/x"
    
  4. 推送更新的y

    git push
    

相关内容