【问题标题】:How can I make individual git folders inside a git repository如何在 git 存储库中创建单个 git 文件夹
【发布时间】:2016-12-01 05:23:23
【问题描述】:

我有这个文件夹布局:

workspace_folder (git repository)
  *  project1 
  *  project2 
  *  project3
  *  ... 

workspace_folder 是一个 git 存储库,因此项目文件夹已经受版本控制。里面做了很多修改。

我怎样才能让它们成为单独的 git 存储库,同时保留它们的历史记录?

【问题讨论】:

标签: git


【解决方案1】:

您可以使用git submodules 并像“超级项目”一样组织存储库:

|- superproject
  |- project1 (git archive) [a]
  |- project2 [b]
  |- project3 [c]
  |- ...

工作流 git 子模块可能听起来有点棘手,但它可以让您跟踪 2 个级别的更改(在 superproject 和每个 submodule 上):

  1. 在子模块项目中进行更改
  2. git commit 您在 子模块 中的更改
  3. git commit 你在 superproject 中的变化
  4. git submodule update 将更改推送到超级项目之前的各个存储库。

您可以在 Pro Git 书籍https://git-scm.com/book/en/v2/Git-Tools-Submodules 上找到有关子模块的更多信息。

【讨论】:

    【解决方案2】:

    这听起来可能很疯狂,而且很可能有更好的解决方案。

    • 尝试首先获取涉及您的一个子项目的所有提交

      git log --pretty=format:%H -- projectA/ > <all-the-commits>
      

    这应该将所有对此文件夹进行更改的提交哈希写入文件all-the-commits

    • 然后创建一个新的orphan分支(意味着它没有任何父提交)

      git checkout --orphan <new-branch-name>
      
    • 然后将你获得的所有提交挑选到这个新分支上

      cat <all-the-commits> | xargs -n 1 git cherry-pick
      
    • 检查并更正当前工作目录

    • 最后但并非最不重要的一点是创建一个新的存储库并将这个分支推送到另一个存储库

      git push <new-repo> <new-branch-name>
      

    最终结果应该是,在新存储库中,您只有子项目中的文件以及更改此文件夹中文件的所有提交(并且只有那些提交)。


    我没有机会测试这些步骤,如果这听起来像是一个可行的解决方案,我会检查并在需要时详细说明。

    【讨论】:

      【解决方案3】:

      我想你正在寻找repo

      Repo 是 Google 团队基于 git 构建的开源工具。

      Repo 帮助我们管理许多 Git 存储库,上传到 我们的版本控制系统,并自动化部分 Android 开发工作流程。 Repo 并不是要取代 Git,只是为了让 在 Android 环境中使用 Git 更容易。回购命令 是一个可执行的 Python 脚本,您可以将其放在路径中的任何位置。

      虽然 google 为他们的 android 开发工作流程设计了它,但它是通用的,可以满足类似的目的需求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-07
        • 1970-01-01
        • 2018-04-05
        • 2021-05-22
        • 1970-01-01
        • 2015-01-13
        • 2013-02-23
        • 1970-01-01
        相关资源
        最近更新 更多