如何在git存储库中创建单独的git文件夹

时间:2016-07-27 09:24:26

标签: git

我有这个文件夹布局:

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

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

如何在保留历史记录的同时将它们作为个人git存储库?

3 个答案:

答案 0 :(得分:1)

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

  • 尝试首先获取触及某个子项目的所有提交

    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>
    

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

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

答案 1 :(得分:0)

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

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

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

  1. 在子模块项目中进行更改
  2. git commit您对子模块的更改
  3. git commit您对 superproject
  4. 的更改
  5. git submodule update将更改推送到超级项目之前的各个存储库。
  6. 您可以在 Pro Git 一本书https://git-scm.com/book/en/v2/Git-Tools-Submodules上找到有关子模块的更多信息。

答案 2 :(得分:0)

我认为您正在寻找repo

Repo是Google团队在git之上构建的开源工具。

  

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

虽然谷歌为他们的Android开发工作流程设计了它,但它是通用的,并且服务器具有类似的目的。