我有一个 GitHub 存储库 (X),我想将其所有文件移动到另一个现有 GitHub 存储库 (Y) 的目录中,就像mv ${HOME}/x/* ${HOME}/y/x
Linux 文件树中的常规文件一样。
- 在这种特殊情况下,我不关心文件的 Git 历史记录,我只想要文件本身
- 如果我创建一个包含第一个存储库的所有文件的 zip 文件并将其上传到第二个存储库,目前 GitHub 没有给我一个选项提炼放在相关目录下
如何将存储库中的所有文件移动到另一个现有存储库的目录中?
答案1
没有内置的概念移动存储库之间的文件。你可以复制文件,如果您愿意,可以单独将它们从旧存储库中删除。
假设您要将文件从master
的分支移动https://github.com/roiko/x
到main
的分支https://github.com/roiko/y
,并且要移动该目录下的文件subdir
。
这是移动文件并保留其历史记录的方法。历史记录会将文件记录为位于根目录下,然后移至根目录下subdir
并“导入”。也可以将文件记录为始终位于 下subdir
,但需要额外的工具。警告:未经测试的代码。
制作工作副本,其中 x 和 y 都可用作遥控器
git clone https://github.com/roiko/y cd y git remote add x https://github.com/roiko/x git fetch x
将旧存储库中的文件移至子目录。我假设 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
。将移动的文件导入到
y
.这意味着创建一个本地分支来处理 的内容y
,并合并x-move
我们在上一步中创建的分支。git checkout -b main y/main git merge x-move git commit -m 'Import files from roiko/x under subdir'
推动结果。
git push origin
(可选)删除
x
存储库。其分支的所有内容和历史记录master
现在都记录在 中y
,但其他分支、问题等则没有记录。
答案2
如果您不关心保留 的历史记录x
,可以按以下方法将其移至y
:
克隆两个项目
git clone https://github.com/roiko/x git clone https://github.com/roiko/y
全部复制
x
到y
cp -a x y/
创建包含所有复制数据的提交
cd y git add x git commit -m "Import files from roiko/x"
推送更新的
y
git push