¿Es posible tener 2 repositorios git en un directorio? Creo que no, pero pensé en preguntar. Básicamente, me gustaría verificar los archivos de configuración de mi directorio de inicio (por ejemplo, .emacs) que deberían ser comunes en todas las máquinas en las que trabajo, pero que tienen un segundo repositorio para archivos locales (por ejemplo, .emacs.local), que contiene configuraciones específicas de la máquina. La única forma en que puedo pensar en hacer eso es tener la configuración local en un subdirectorio e ignorar ese subdirectorio del repositorio principal de git. ¿Alguna otra idea?
git
git-submodules
git-subrepo
Joe Casadonte
fuente
fuente
git subtree
hará el trabajo.Respuestas:
Si entiendo lo que está haciendo, puede manejarlo todo en un repositorio, usando ramas separadas para cada máquina y una rama que contenga sus archivos de configuración de directorio de inicio comunes.
Inicialice el repositorio y confirme los archivos comunes en él, quizás cambiando el nombre de la rama MASTER como Común. Luego, cree una rama separada desde allí para cada máquina con la que trabaje y confirme archivos específicos de la máquina en esa rama. Cada vez que cambie sus archivos comunes, combine la rama común en cada una de las ramas de la máquina y empuje a sus otras máquinas (escriba un script para eso si hay muchas).
Luego, en cada máquina, verifique la rama de esa máquina, que también incluirá los archivos de configuración comunes.
fuente
Este artículo cubre esto relativamente bien:
https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown
Básicamente, si está trabajando desde la línea de comandos, esto es más simple de lo que imagina. Suponga que quiere 2 repositorios de git:
Podrías configurarlos así:
Puede agregar un archivo y enviarlo solo a uno así:
Entonces, las opciones para git vienen primero, luego el comando, luego las opciones del comando git. Fácilmente podría alias un comando git como:
Así que puedes comprometerte con uno u otro escribiendo un poco menos, como
gitone commit -m "blah"
.Lo que parece volverse más complicado es ignorarlo. Dado que .gitignore normalmente se encuentra en la raíz del proyecto, también necesitaría encontrar una manera de cambiar esto sin cambiar la raíz completa. O bien, puede usar .git / info / exclude, pero todas las ignoraciones que realice no se confirmarán ni presionarán, lo que podría arruinar a otros usuarios. Otros que usan cualquiera de los repositorios pueden enviar un .gitignore, lo que puede causar conflictos. No tengo claro cuál es la mejor manera de resolver estos problemas.
Si prefiere herramientas GUI como TortoiseGit, también tendrá algunos desafíos. Puede escribir un pequeño script que cambie el nombre de .gitone o .gittwo a .git temporalmente para que se cumplan las suposiciones de estas herramientas.
fuente
alias gitone='git --git-dir=.gitone'
gitone config core.excludesfile gitone.exclude
ygitone add gitone.exclude
. Hice un script que amplía esta solución: github.com/capr/multigitgit config --global alias.youralias '!git --git-dir="/d/MyProject/_git"'
entoncesgit youralias status
:).gitignore
archivos generalmente se configuran y olvidan, entonces puede hacer diferentes copias para cada repositorio y luego copiar la versión relevante en el directorio como parte del alias. Esto se aplica a otros archivos en la raíz que pueden entrar en conflicto, comoREADME.md
y.gitattributes
.Eche un vistazo al submódulo git .
fuente
RichiH escribió una herramienta llamada vcsh que es una herramienta para administrar dotfiles usando repositorios desnudos falsos de git para poner más de un directorio de trabajo en $ HOME. Nada que ver con csh AFAIK.
Sin embargo, si tenía varios directorios, una alternativa a los submódulos de git (que son un dolor en las mejores circunstancias y este uso de ejemplo no es la mejor de las circunstancias) es gitslave, que deja los repositorios esclavos comprobados en la punta de un rama en todo momento y no requiere el proceso de tres pasos para realizar un cambio en el repositorio subsidiario (verifique en la rama correcta, realice y confirme el cambio, luego vaya al superproyecto y confirme el nuevo submódulo).
fuente
Es posible mediante el uso de la variable,
GIT_DIR
pero tiene muchas advertencias si no sabe lo que está haciendo.fuente
Sí, los submódulos son probablemente lo que quieres. Otra opción sería tener su copia de trabajo en un subdirectorio y luego apuntar enlaces simbólicos desde su directorio de inicio a los archivos de interés.
fuente
mi método preferido es usar un repositorio en un subdirectorio y usar enlaces simbólicos recursivos:
donde el archivo ' repo / build ' se parece a:
precaución : no use 'git add'.
fuente
La otra opción es colocarlos en carpetas separadas y crear enlaces físicos simbólicos de una carpeta a otra.
Por ejemplo, si existen los repositorios:
Y:
Puede enlazar simbólicamente las carpetas
FolderA
yFolderB
desde el Repo1 al Repo2. Para Windows, el comando para ejecutar en Repo1 sería:Para los archivos en los repositorios principales, necesitaría un enlace simbólico a cada uno de ellos, y también agregarlos al repositorio
.gitignore
para evitar ruido, a menos que lo desee.fuente
Descargo de responsabilidad: esto no es publicidad. Soy el desarrollador de la biblioteca proporcionada.
Creé una extensión de git para manejar casos en los que desea mezclar varios repositorios en una carpeta. La ventaja de la biblioteca es realizar un seguimiento de los repositorios y los conflictos de archivos. lo puedes encontrar en github . También hay 2 repositorios de ejemplo para probarlo.
fuente