2009-11-06 115 views
0

这可能看起来像一个奇怪的问题,但忍受着我。分支没有分支

我想(AB?)使用git的小项目我的工作,在这里我想分支文件,但保持当前分支中的分支文件以新的名称,维护历史(允许我重新改变原来的)。这与我认为的Subversion类似,Subversion不知道分支,只是复制。

我想有双倍作为文档模板的文档(这些是纯文本文件,不用担心合并将是很有可能的),并且为了在另一个文档上创建新文档,我希望只是分支它。

这是在所有可能使用Git?如果不是的话(我实际上假设它不是,Git的结构),是否有任何可以想象的选择?不过,我不想从Git中移走,因为我使用它的次数更多,所以如果没有好的解决方案,我想我可以在其上实现我自己的(轻量级)分支/ rebase。

回答

2

这有什么错分支?你可以很容易地维护一个“模板”分支,并将它们之间的文档移动。

说,例如:

git checkout -b templates 
git checkout master 
git checkout templates path/to/template.ext 
cp path/to/template.ext path/to/document.ext 
# decide you want to change the template 
cp path/to/document.ext path/to/template.ext 
git commit -a -m "changed template" 
git checkout templates 
git merge master 
+0

是的,我可能不得不求助于做这种方式(这就是我的意思是我自己的分支/衍合)。这种方法的问题是,无法知道文档基于哪个模板(以及该模板基于哪个模板,等等),所以我仍然必须实现我自己的方案来执行正确的rebase当链中的文档发生变化时。 – falstro 2009-11-06 08:34:57

0

你可以想见,在安装目录树中的不同地方同样的子模块,不同版本的安装。文件名会相同,但版本不同。不过,我不确定我想成为那个维护那些东西的人。

1

git会检测你的文件的副本,并正确地跟踪它们的历史。

也许我不理解你的要求?

  • 是否您希望能够修改模板文件并让“分支”文件反映更改?
  • 难道你只是想能够跟踪哪些文件来自哪些模板?
+0

我想跟踪哪些文件来自哪个模板/文件,并且能够将这些更改合并到文件中。据我所知,git只跟踪分支,复制一个文件就像写一个不同名字的新文件一样,或者有办法告诉git这实际上是x的副本吗? – falstro 2009-11-09 21:01:16

+0

然后git在幕后为你做这件事。你不必告诉git这个文件是x的一个副本,它已经知道它是一个x的副本,只是从文件的内容。 Git自动检测文件副本。它还自动检测从一个文件移动到下一个文件的内容。使用git diff -M和git show -M来测试它,但它应该显示该文件已被复制。 – 2009-11-10 05:13:38

+0

我想git会跟踪内容,而不是文件。因此,文件名之间没有跟踪,只是内容,在这种情况下很难判断是否足够好。 http://stackoverflow.com/questions/1537616/handling-renames-svn-vs-git-vs-mercurial – falstro 2009-11-12 17:05:27