【问题标题】:How to Use Sub-Sets of Git Repo Files?如何使用 Git Repo 文件的子集?
【发布时间】:2013-10-07 17:55:13
【问题描述】:

我是版本控制的新手,但我很快发现 Git 是 a great way to manage my collection of writings。这是一个稍微不寻常的用例,所以我有一个问题,关于 Git 的哪个功能最能帮助我管理“收集的”作品(即整个集合)和管理“选定的”作品(即集合的子集) )。

例如,我有一个包含 200 个 .txt 文件的存储库。每一个都是一首诗的文本。现在,我想留出其中的 20 个文件,例如,用于创建手稿。当我处理这 20 个文件并将它们视为一个组时,我可能会对它们进行更改。当然,我希望这些更改能够反映在包含所有 200 个文件的“主”存储库中。

我已经看到各种方法可能适用于此,我很困惑。

  1. 我首先尝试的是一个充满符号链接的子文件夹。这太棒了,直到我意识到 Windows 上的 Git 不能很好地处理符号链接。
  2. a branch can handle this in a nice way, with help from merge --strategy ours
  3. 我可能更喜欢submodule,因为它可以让我 单独跟踪手稿项目的问题,并保留相关的 wiki,作为 bitbucket 或任何地方的项目。它也可能使 未来的合作会更容易一些。然而,我听说 子模块存在缺陷。那些会被证明是 我有问题吗?
  4. 然后是subtree。这对我来说会是一个更好的方法吗 有什么想法?子树或子模块可以使用我喜欢的分支合并策略吗?
  5. 是否还有其他可能更好的方法可供考虑?

【问题讨论】:

  • 您的解决方案 1 和 2 看起来非常合理。他们应该把你带到你想要的地方。
  • 4可以使用和2一样的合并策略吗?

标签: git text github merge bitbucket


【解决方案1】:

我可能没有抓住重点。 git 存在的理由是它很容易分支。这实质上允许您非常简单地创建平行的工作线。

但是,如果您只是从您的大师中创建一个分支,请将您的 20 首或诗歌整理到例如一个文件夹,然后提交到这个新分支(维护您的 20 首诗的平行宇宙),然后当您希望在您的主分支中注册这些更改时将其合并到主分支中。

$ git branch manuscript
$ git checkout manuscript

$ mkdir my20poems
$ cp *.poems my20poems

$ git add my20poems
# make your changes, now commit them in my commit graph 
$ git commit -m "did some work"
# now I want these changes in master
$ git checkout master
$ git merge manuscript  #or even use the --no-ff switch if you want the branch history kept

您可以随时重新访问您之前的任何提交,这样您的所有提交状态都将被保留。

$ git log --oneline --decorate --graph --all

【讨论】:

  • 虽然这种方法可行(并且它很好地避免了必须删除分支中的大量文件的麻烦),但最终结果不会是一首诗的多个副本,每次一个副本出现在手稿中?这对我来说并不理想。
  • 好的,如果对象的重复项具有相同的 SHA1 哈希,则 git 不会存储它们:git-scm.com/book/en/Getting-Started-Git-Basics
  • 您可以通过手动将更改的文件复制到主文件而不是合并来实现与“--strategy ours”相同的效果,我认为这会给您带来类似的效果和更简单的历史记录。但是,如果您决定将母版和手稿本身视为不同的实体,那么您应该将它们作为子模块放入。
  • 最终,我决定使用git branch,因为我了解了更多,并且总体上对git 更加熟悉了。将此标记为答案。
猜你喜欢
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2023-03-29
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多