Git: поместить ветку в подкаталог
У меня есть репозиторий git (на github.com) с двумя ветвями: master и gh-pages. Я хотел бы иметь ветвь gh-pages в подкаталоге, так что мне не нужно каждый раз переключать ветки.
repo/
(content of the master branch)
gh-pages/
(content of the gh-pages branch)
Возможно ли это?
Ответы
Ответ 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