Dos repositorys git para los mismos files

En mi computadora de desarrollo, he utilizado git simplemente como un sistema automático de copy de security / recuperación. Sé que esto no es exactamente como se pretende usar git, pero ha sido muy efectivo para mí. Tengo un script simple que se ejecuta cada 5 minutos (a la manera del Progtwigdor de tareas de Windows) y comtesting si los files han cambiado. Si es así, crea una nueva confirmación (con el post "confirmación automática") y la coloca en un espejo que tengo en un disco duro externo. Puedo extender esto para presionar a los espejos en otras ubicaciones, también.

No quiero dejar de hacer esto, ya que el sistema me ha salvado la vida más de una vez. Entre fallas de energía, eliminaciones accidentales de files o un cliente que repentinamente decidió que les gustaba cómo se veía el proyecto hace 2 meses y quieren revertir todos los cambios, la capacidad de retrotraer todo a cualquier punto en el time ha sido invaluable.

Ahora el problema viene cuando quiero poner uno de estos repositorys en github para el trabajo queueborativo. Cada vez que presiono github crea decenas o cientos o confirma, a menudo con código incompleto ya que estaba en el medio de modificar un file cuando pasaron cinco minutos.

Me gustaría tener un segundo repository de classs que residen en el mismo directory y vigilar los mismos files, sin embargo, quiero que solo se confirme manualmente. De esta forma, cuando presiono github solo hay confirmaciones significativas y todas mis copys de security automáticas están ocultas a miradas indiscretas.

¿Esto es posible?

Edición rapida –

Buscando en Google, ¿podría ser git rebase command git rebase ? Parece que puede destruir todas las confirmaciones automáticas, lo cual no es exactamente el comportamiento ideal.

Long Edit –

Este pequeño proyecto ha sido una PESADILLA .

Siguiendo el consejo de @janos establecí configurar un segundo repository en cada carpeta. Para configurar esto simplemente utilicé git clone en el repository actual. GIT_DIR mi file autosave.bat para utilizar GIT_DIR y GIT_WORK_TREE y pensé que todo sería GIT_WORK_TREE … no era

Primero, intente lo siguiente en una PC con Windows 7 por diversión:

 test.bat -------- CD C:\SomeFolder FOR /D %%i in (*) DO ( CD %%i set GIT_WORK_TREE=%cd% echo %GIT_WORK_TREE% CD .. ) 

Los resultados de esto deberían ser obvios, ¿verdad? Pasamos por todos los subdirectorys en SomeFolder , lo configuramos en el GIT_WORK_TREE actual y luego GIT_WORK_TREE . La salida:

 C:\SomeFolder C:\SomeFolder C:\SomeFolder C:\SomeFolder .... 

Parece que los scripts por lotes se ejecutan fuera de order ( set GIT_WORK_TREE=%cd% se procesa antes de que el CD %%i haya completado). Solo puedes imaginar el horror que esto causó en mis copys de security cuando cada proyecto estaba en el repository de cada otro proyecto.

Traté de evitar esto usando git --git-dir=backup.git --work-tree=%cd% solo para get errores cuando las carpetas tenían un espacio en el nombre (tenía que poner %cd% entre comillas)

Finalmente conseguí ese funcionamiento y backup.git no fue reconocido como un directory de git y se agregó al repository. Agregué lo siguiente a mi .gitignore para estar seguro:

 # git is really making me angry today /.git/ /backup.git/ 

Con eso, creo que finalmente está funcionando, pero me da escalofríos probar mis copys de security remotas y ver si están realmente configuradas correctamente.

No creo que tu configuration sea extraña. Sé que al less un tipo que tiene un gancho de emacs para confirmar su repository cada vez que guarda un file (es un mantenedor de xemacs por cierto).

Hay una manera perfectamente limpia de hacer lo que quiera, gracias a las variables GIT_DIR y GIT_WORK_TREE . Por ejemplo, dado cualquier repository de Git, puede configurar un repository "autocommit" que sea independiente del repository "oficial" que envíe a GitHub.

Inicializando un repository de autocompromiso

 cd /path/to/project export GIT_DIR=/tmp/autocommit.git export GIT_WORK_TREE=$PWD git init git add . git commit -m init 

Actualización de un autocommit repo = autocommit.sh

 #!/bin/sh export GIT_DIR=/tmp/autocommit.git ## same path as you initialized export GIT_WORK_TREE=/path/to/real/project ## same path as you initialized git add --all ## --all takes care of deletes too git commit -m auto-commit 

Eso es. Los dos repos ni siquiera necesitan saber de la existencia del otro.

ACTUALIZAR

Para responder a sus preguntas de seguimiento:

si utilicé GIT_DIR para crear un segundo repository en el mismo directory, ¿también tendría que exportar GIT_DIR = / tmp / .git antes de confirmar mis confirmaciones manuales?

Para sus confirmaciones manuales, no use estas variables en absoluto. Usa el repository de Git como lo harías normalmente. El repository de autocommit es completamente independiente, no afecta su repo regular de ninguna manera. En resumen, no necesita configuration para su uso regular.

Trabajo principalmente en Windows y no estoy seguro de si la variable de entorno GIT_DIR funcionará. ¿Puedo usar git –git-dir = … con la misma eficacia?

Sugiero include el autocommiter en su propia secuencia de commands, donde puede configurar las variables de entorno que necesita. Dado que tiene múltiples repos de autocompromiso, tal vez desee crear un autocommit.sh común que tome los parameters, que llama desde los scripts de contenedor, uno por repository. Por ejemplo. Esta es solo una forma de hacerlo.

¿es posible cambiar el directory git de un repository existente? ¿Es tan fácil como renombrar la carpeta .git? Porque ya tengo cuatro o cinco proyectos autocomprometidos con el repository pnetworkingeterminado en lugar de autocommit.git y me gustaría cambiarlos.

Sugiero que mantenga su depósito regular como está. Crea clones nuevos para autocomentarse así:

 git clone --bare /path/to/proj1 /my/autocommits/proj1.git 

No he probado esta solución, pero los conceptos parecen correctos. http://grahamc.com/blog/multiple-git-repositories-one-directory-dotfiles/ Parece que configura la variable de entorno Git en un directory mientras tiene el repository en otro directory.