【问题标题】:How do I pull just one folder from another Git repository?如何从另一个 Git 存储库中只提取一个文件夹?
【发布时间】:2019-10-17 23:01:23
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 你可以在你的项目中创建一个分支,然后'filter-branch'感兴趣的子目录。然后导入分支。
  • 谢谢@Serge - 这很有帮助。

标签: git git-subtree


【解决方案1】:

正如 Serge 在 cmets 中建议的那样 - 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 2013-02-23
    • 2011-01-07
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多