git: поместите ветку в подкаталог - PullRequest
20 голосов
/ 05 марта 2010

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

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

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

Ответы [ 6 ]

25 голосов
/ 06 марта 2010

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

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

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

5 голосов
/ 23 ноября 2015

Начиная с 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, используйте скрипт, предоставленный в https://github.com/X1011/git-directory-deploy.

5 голосов
/ 05 марта 2010

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

То есть ...

/repo/master/(clone on master branch)

а затем еще один клон, который находится на другой ветке

/repo/gh-pages/(clone on gh-pages branch)
3 голосов
/ 05 марта 2010

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

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

0 голосов
/ 11 января 2017

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

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

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

0 голосов
/ 05 марта 2010

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

Если честно, git co gh-pages не намного сложнее, чем cd ../gh-pages

...