Подтвердить что ты не робот

Git: поместить ветку в подкаталог

У меня есть репозиторий git (на github.com) с двумя ветвями: master и gh-pages. Я хотел бы иметь ветвь gh-pages в подкаталоге, так что мне не нужно каждый раз переключать ветки.

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

Возможно ли это?

4b9b3361

Ответ 1

Это не то, как вещи предназначены для работы. Теоретически вы можете клонировать репозиторий в подкаталоге вашего исходного клона и помечать этот каталог как исключенный из репозитория более высокого уровня, но не проще ли просто проверить его в совершенно другом каталоге, а не в подкаталоге?

То есть...

/repo/master/(clone on master branch)

а затем другой клон, который на другой ветке

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

Ответ 2

Возможно, вы ищете вариант сложения поддерева.

Это позволит вам проверять несвязанную ветку в подкаталоге другого, а затем сливаться между ними. Вам все равно придется проверять gh-страницы и вносить изменения в основное репо, прежде чем толкатели будут жить в GitHub, однако.

Вы также можете проверить gh-страницы как подмодуль вашей основной ветки, если это вам подходит.

Ответ 3

Начиная с git 2.5, вы можете одновременно проверять обе ветки в разных каталогах. См. https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows. Настройка через git worktree add -b gh-pages ../gh-pages origin/gh-pages.

Если вы хотите, чтобы содержимое подкаталога вашего тега master было помещено в gh-pages в github, используйте script, предоставленный в https://github.com/X1011/git-directory-deploy.

Ответ 4

Как правило, с контролем версий это не очень хорошая идея объединить несколько проектов в один репозиторий. Например, что, если кто-то хотел бы разветкить ваш репозиторий, но не разместить свою копию в GitHub? Тогда каталог gh-pages был бы совершенно бесполезен для них. Даже если бы они размещали их в GitHub, каталог gh-pages мог бы быть очень важен для них.

Я понимаю, что способ GitHub делать это противоречит этому совету, несколько (в конце концов, хотя они находятся на разных ветвях, они все еще находятся в одном и том же репо). Однако ветки в этом случае полностью не связаны (они не имеют никакой истории), поэтому с практической точки зрения, как будто они были в отдельных хранилищах. Если кто-то клонирует ваше репо и не хочет ветки gh-pages, он может удалить его, и он будет иметь нулевой эффект на master.

Ответ 5

Я пробовал трюк git subtree, но для этого требуется, чтобы master передал весь контент gh-pages, что не является идеальным в этом случае. Гораздо лучше и проще -

  • Создайте новый каталог в ./repo/gh-pages/
  • Поместите строку на .gitignore для этого (gh-pages)
  • cd gh-pages/, git init и git checkout -b gh-pages, создавая независимый git remote там

Вы также можете git clone непосредственно на ./gh-pages/ только с той ветвью, которую хотите.

Ответ 6

Ветви в git являются указателями на фиксацию (это перемещение), и поэтому наличие ветки как подкаталога невозможно.

Чтобы быть справедливым, git co gh-pages не намного сложнее, чем cd ../gh-pages