2010-03-05 27 views
19

Tengo un repositorio git (en github.com) con dos ramas: master y gh-pages. Me gustaría tener la rama gh-páginas en un subdirectorio, por lo que no es necesario cambiar las ramas cada vez.git: poner una rama en un subdirectorio

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

¿Es esto posible?

+0

Por lo general, es más sencillo usar un repositorio separado, pero es posible que encuentre [contrib/workdir/git-new-workdir] de git.git (http://git.kernel.org/?p=git/git.git ; a = blob; f = contrib/workdir/git-new-workdir; h = 75e8b258177f7f04dadcac125f2bf7ebea4d0f81; hb = HEAD) útil. –

+0

una respuesta directa real a la pregunta: http://stackoverflow.com/questions/4750520/git-branch-gh-pages/4993758#4993758 – cregox

Respuesta

5

Así no es como las cosas están diseñadas para funcionar. Usted podría clonar teóricamente el repositorio dentro de un subdirectorio de su clon original y marcar ese directorio como excluido del repositorio de nivel superior, pero ¿no sería mucho más simple simplemente verificarlo en un directorio completamente diferente en lugar de un subdirectorio?

Es decir ...

/repo/master/(clone on master branch) 

y luego otro clon que está en la otra rama

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

general con el control de versiones que no es una buena idea para combinar múltiples proyectos en una sola repositorio. Por ejemplo, ¿qué pasa si alguien quiere bifurcar su repositorio, pero no aloja su copia en GitHub? Entonces el directorio gh-pages sería completamente inútil para ellos. Incluso si alojan el suyo en GitHub, el directorio gh-pages podría muy bien todavía ser irrelevante para ellos.

Me doy cuenta de que la forma de hacer esto de GitHub va en contra de este consejo, de alguna manera (después de todo, a pesar de que están en ramas diferentes, todavía están en el mismo repositorio). Sin embargo, las ramas en este caso no tienen ninguna relación (no comparten ningún historial) por lo que desde una perspectiva práctica, es como si fuera en repositorios separados. Si alguien clona su repositorio y no desea la rama gh-pages, puede eliminarlo y tendrá cero efecto en master.

-2

Las ramas en git son punteros a confirmaciones (ese movimiento), por lo que no es posible tener una bifurcación como subdirectorio.

Para ser justos, git co gh-pages no es mucho más difícil que cd ../gh-pages

+0

No se trata de ser más difícil, pero tener ambos allí al mismo tiempo. Es perfectamente razonable tener una bifurcación gh-pages completamente disjunta del master, y tan conveniente tenerlas una al lado de la otra para mover archivos. –

24

Usted puede estar buscando la subtree merging option.

Le permitirá verificar una rama no relacionada en un subdirectorio de otra y luego fusionarse entre ellas. Sin embargo, todavía tendría que pagar gh-páginas y fusionarse en cambios desde el repositorio principal antes de que los empujes se activaran en GitHub.

También puede consultar gh-páginas como un submódulo de su rama principal si le conviene más.

+1

FWIW, este es el que debería aceptarse como la respuesta correcta. –

+0

Se proporciona una breve guía aquí: https://gist.github.com/cobyism/4730490 – orbitbot

+0

Su última línea tiene un GRAN sentido. Gracias por el excelente consejo! –

4

Comenzando con git 2.5, puede tener ambas ramas desprotegidas al mismo tiempo en diferentes directorios. Ver https://github.com/blog/2042-git-2-5-including-multiple-worktrees-and-triangular-workflows. Configuración a través del git worktree add -b gh-pages ../gh-pages origin/gh-pages.

Si desea que el contenido de un subdirectorio de su master pago y envío se ponga en gh-pages en github, utilice la secuencia de comandos proporcionada en https://github.com/X1011/git-directory-deploy.

+0

Hay demasiados archivos en ese directorio, ¿cómo puedo usarlo? ¿Debería copiar el archivo 'deploy.sh'? – fiatjaf

+0

Sí, solo 'deploy.sh'. Consulte a continuación el encabezado ** configuración ** en el archivo README.md proporcionado: https://github.com/X1011/git-directory-deploy#configuration – koppor

0

He intentado el truco git subtree, pero requiere que master tenga todo el contenido gh-pages comprometido con él, lo que no es ideal en este caso. Mucho mejor y más simple es

  1. Crear un nuevo directorio en ./repo/gh-pages/
  2. poner una línea en .gitignore para que (gh-pages)
  3. cd gh-pages/, git init y git checkout -b gh-pages, creando un git independiente existe remota

También puede git clone directamente al ./gh-pages/ con solo la rama que desee.