git:将分支放入子目录中

27

我有一个托管在github.com上的git仓库,其中包括两个分支:master和gh-pages。我希望将gh-pages分支放在一个子目录中,以便每次不必切换分支。

repo/
    (content of the master branch)
    gh-pages/
            (content of the gh-pages branch)

这是可能的吗?


通常使用单独的存储库更简单,但您可能会发现git.git的contrib/workdir/git-new-workdir很有用。 - Chris Johnsen
一个实际的直接回答问题的链接:https://dev59.com/Gm445IYBdhLWcg3wq8FY#4993758 - cregox
6个回答

26

您可能正在寻找子树合并选项

它将允许您将一个不相关的分支检出到另一个分支的子目录中,然后在它们之间来回合并。但是,在推送到GitHub之前,您仍然需要检出gh-pages分支并合并主存储库中的更改。

如果这更适合您,您还可以将gh-pages作为主分支的子模块进行检出。


1
就我所知,这个应该被接受为正确答案。 - Ben Collins
你的最后一行非常有意义。感谢你提供的绝妙提示! - Andrew Christianson
这个链接似乎已经失效了,现在被重定向到http://git-scm.com/book/en/v2。 - luator

9
你可以同时在不同的目录中检出两个分支。
设置:
git worktree add -b gh-pages ../gh-pages origin/gh-pages

那么,

  • . 目录中是 master 分支,在 ../gh-pages 目录中是分支 gh-pages
  • 您可以在这两个目录中使用常规的 git pullgit push actions 来工作。
  • 您可以节省磁盘空间,因为克隆只存储一次(而不是两次)。
  • 您可以在每个目录中切换分支。唯一限制:检出的分支必须每次不同。也就是说,您不能在两个目录中都检出 patch-1

注:


那个目录里有太多文件了,我该怎么使用它?我只需要复制 deploy.sh 文件吗? - fiatjaf
是的,只需要 deploy.sh。请查看提供的 README.md 文件中的 configuration 标题下面的内容:https://github.com/X1011/git-directory-deploy#configuration - koppor

6

事情的设计并不是这样的。理论上,您可以在原始克隆的子目录中克隆存储库,并将该目录标记为从更高级别的存储库中排除,但是将其检出到完全不同的目录而不是子目录中不是更简单吗?

也就是说...

/repo/master/(clone on master branch)

然后再克隆另一个位于另一分支上的副本。

/repo/gh-pages/(clone on gh-pages branch)

3
通常情况下,将多个项目合并到一个仓库中不是版本控制的好方法。例如,如果有人想要 fork 您的仓库,但不想在 GitHub 上托管他们的副本,那么 gh-pages 目录对他们来说将完全没有用处。即使他们在 GitHub 上托管了自己的副本,gh-pages 目录对他们来说也可能是无关紧要的。
我意识到 GitHub 的做法有些违背这种建议(毕竟,尽管它们在不同的分支上,但它们仍然在同一个仓库中)。然而,在这种情况下,这些分支是完全不相关的(它们不共享任何历史记录),因此从实际角度来看,就好像它们是在不同的仓库中一样。如果有人克隆您的仓库并不想要 gh-pages 分支,他们可以删除它,对 master 没有任何影响。

0

我尝试过使用 git subtree 技巧,但它要求将所有的 gh-pages 内容提交到 master 分支中,这在这种情况下并不理想。更好、更简单的方法是:

  1. ./repo/gh-pages/ 目录下创建一个新目录
  2. .gitignore 文件中添加一行(指向 gh-pages 目录)
  3. cd gh-pages/,执行 git initgit checkout -b gh-pages 命令,在该目录下创建一个独立的 git 远程分支

你也可以直接使用 git clone 命令将所需分支克隆到 ./gh-pages/ 目录下。


-3

Git中的分支是指向提交(移动的)的指针,因此将分支作为子目录是不可能的。

公平地说,git co gh-pages并不比cd ../gh-pages难多少


这不是更难,而是需要同时拥有两者。拥有一个与主分支完全不相关的 gh-pages 分支是完全合理的,将它们并排放置以移动文件非常方便。 - Jan Segre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接