繁体   English   中英

如何从另一个 Git 存储库中仅提取一个文件夹?

[英]How do I pull just one folder from another Git repository?

我正在从一些现有的存储库创建一个 monorepo,并且我想保留提交历史记录。

这里的答案告诉我们git subtree命令对此很有用,如果我们想将旧的 git 存储库按原样导入新结构,它可以正常工作。

但是,我有一个我很重要的项目,如下所示:

/
  server/
    index.js
    package.json
  src/
  package.json 

在这里,我只想导入server文件夹,并在上面保留提交历史记录。

我可以只导入整个文件夹,删除我不需要的所有内容,然后将server中的所有内容上移一个文件夹,但我担心会破坏提交历史记录。

有没有办法只导入一个子目录?

正如 Serge 在评论中所建议的那样 - git filter-branch可以用来实现这一点。

这是我做的方式,也许有更简单的方法。

  1. 创建一个临时远程仓库“temp”。

  2. 在现有的回购中:

git filter-branch --subdirectory-filter server -- --all 
git remote add temp git@temporaryrepo....
git push temp master

这将创建一个以server目录中的所有内容为根的存储库。

  1. 在你的新仓库中
git subtree add -P packages/server /path/to/temp.git master

这会将临时根目录导入packages/server

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM