【问题标题】:How do I create a new git repository from a folder in an existing git repository?如何从现有 git 存储库中的文件夹创建新的 git 存储库?
【发布时间】:2011-03-24 15:14:01
【问题描述】:

我想在现有 git 存储库下创建一个文件夹的新 git 存储库。我希望将历史记录保留在新存储库中。如何创建这个新的 git 存储库?

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    您可以克隆它,然后在克隆上应用过滤器分支以拆分该存储库,仅提取您想要的目录(及其完整历史记录)。

    Detach subdirectory into separate Git repository

    注意克隆步骤中使用的git clone --no-hardlinks /XYZ /ABC

    --no-hardlinks 开关使 git 在克隆本地存储库时使用真实的文件副本而不是硬链接。

    【讨论】:

      【解决方案2】:

      假设您只想将子目录保留为单独的项目:您可以使用git filter-branch

      1. 创建一个新分支
      2. 定义一个“树过滤器”,以您想要的方式重新排列已签出的副本,最好是作为单独的脚本
      3. 运行git filter-branch --tree-filter=/path/to/script thebranch

      您现在有一个与正常开发流无关的单独分支,仅包含子目录。克隆新分支的人只会获得子项目历史记录。

      【讨论】:

      • 您无需在此处定义(自定义)树形过滤器。如VonC's answer 中链接的答案所述,内置子目录过滤器正是这样做的。您也不想在同一个 repo 的新分支上执行此操作,而是在单独的克隆中执行此操作。如果 repo 在不同的分支上同时包含子目录和完整项目,则初始克隆将获取两者,为每个分支创建远程跟踪分支。浪费!
      【解决方案3】:

      您可以克隆它并保留您想要的文件;然后将保留历史记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        • 2015-09-29
        • 2016-12-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-11
        • 1970-01-01
        相关资源
        最近更新 更多