如何仅从另一个 Git 存储库中提取一个文件夹?
How do I pull just one folder from another Git repository?
我正在从一些现有的存储库创建一个单一存储库,我想保留提交历史记录。
This answer here 告诉我们 git subtree
命令对此很有用,如果我们想将旧的 git 存储库原封不动地导入新结构,它可以正常工作。
但是,我有一个重要的项目如下所示:
/
server/
index.js
package.json
src/
package.json
在这里,我只想导入 server
文件夹,并保留其上的提交历史记录。
我可以只导入整个文件夹,删除我不需要的所有内容,然后将 server
中的所有内容移到一个文件夹中,但我担心会破坏提交历史记录。
有没有办法只导入一个子目录?
正如 Serge 在评论中建议的那样 - git filter-branch
可用于实现此目的。
我是这样操作的,也许还有更简单的方法。
创建一个临时远程仓库 'temp'。
在现有的回购中:
git filter-branch --subdirectory-filter server -- --all
git remote add temp git@temporaryrepo....
git push temp master
这将创建一个以 server
目录中的所有内容作为根的存储库。
- 在你的新仓库中
git subtree add -P packages/server /path/to/temp.git master
这会将临时根目录导入 packages/server
我正在从一些现有的存储库创建一个单一存储库,我想保留提交历史记录。
This answer here 告诉我们 git subtree
命令对此很有用,如果我们想将旧的 git 存储库原封不动地导入新结构,它可以正常工作。
但是,我有一个重要的项目如下所示:
/
server/
index.js
package.json
src/
package.json
在这里,我只想导入 server
文件夹,并保留其上的提交历史记录。
我可以只导入整个文件夹,删除我不需要的所有内容,然后将 server
中的所有内容移到一个文件夹中,但我担心会破坏提交历史记录。
有没有办法只导入一个子目录?
正如 Serge 在评论中建议的那样 - git filter-branch
可用于实现此目的。
我是这样操作的,也许还有更简单的方法。
创建一个临时远程仓库 'temp'。
在现有的回购中:
git filter-branch --subdirectory-filter server -- --all
git remote add temp git@temporaryrepo....
git push temp master
这将创建一个以 server
目录中的所有内容作为根的存储库。
- 在你的新仓库中
git subtree add -P packages/server /path/to/temp.git master
这会将临时根目录导入 packages/server