remota rama example comandos cambiar git merge dvcs

rama - git pull



Git: fusionar sucursales públicas y privadas mientras se mantienen ciertos archivos intactos en ambas sucursales (4)

He leído algunas preguntas de git aquí, pero no pude encontrar una respuesta a esta:

Tengo sucursales públicas y privadas donde quiero permitir que ciertos archivos divergan.

Esos son archivos de configuración con contraseñas y mis personalizaciones locales.

Quiero poder combinar las sucursales en ambos sentidos: de privado a público y viceversa, pero no quiero que esos archivos específicos se fusionen automáticamente.

¿Hay una manera de configurar git de esta manera? Me encantaría encontrar una solución automatizada :) - para que la fusión se pueda hacer como siempre.

EDITAR: aquí está la solución que me funcionó (gracias a VonC por el asesoramiento en gitattribute)

Lo único inesperado para mí fue que la "protección de fusión" comienza a funcionar solo después de que los archivos se hayan desviado en las dos ramas, no inmediatamente después de que se aplicó la siguiente configuración

.gitattributes (seguimiento con git si desea compartir esto) o .git / info / attributes:

file1 merge=keepmine path/file2 merge=keepmine

keepmine es el administrador de combinación personalizado con nombre que es solo un comando llamado "no hacer nada" llamado en lugar del controlador de combinación interno en los archivos seleccionados, que se configura a continuación

Cuando me git merge --squash private rama privada a una pública, suelo hacer git merge --squash private . De esa manera, las ediciones privadas no entrarán en el historial de Git en la sucursal pública.

.git / config:

#public repository [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = <public repo git url> #private repository #has to set up with git init and populated with the initial commit to branch mybranch [remote "private"] push = +: url = /path/to/local/private/repo [merge "keepmine"] name = dont_merge_selected_files driver = echo %O %A %B [branch "master"] remote = origin merge = refs/heads/master #private branch settings [branch "mybranch"] remote = private merge = refs/heads/mybranch

Si hay una manera de mejorar esto, por favor comenta


Esto solo parece funcionar si se detectan conflictos de combinación. Al fusionarse entre las ramas, el archivo se sobrescribe. A menos que establezca algo mal. Por supuesto esto en Windows msysgit git versión 1.6.5.1.1367.


Mantener las contraseñas bajo el control de versiones es la peor idea. Necesita CVS, no git, para trabajar con archivos separados. Git como muchos otros DVCS modernos que trabajan con todo el árbol, no con archivos separados.


Para estar seguro, puede agregar un git attribute (vea aquí un ejemplo ) para esos archivos privados.

De esa manera, puede definir un script (un "administrador de fusión") que garantizará que el archivo que incluye información privada permanezca vacío (o con un contenido público) si se fusiona en la sucursal pública, al tiempo que mantiene su contenido local si se fusiona con la privada. rama.
Significa que puede fusionar / rebase sin pensar en ese archivo.


Una forma de hacer esto es con git rebase . Al mantener sus cambios privados a unos pocos pasos del final de su master , puede enviar material público a la rama master (o lo que sea que elija como su rama de trabajo), y luego volver a ajustar su rama privada contra la maestra cuando quiera actualizar .

Otra forma de manejar esto es mantener los archivos de configuración de la plantilla en Git, como frobozz.config.template . En su directorio de trabajo, copie frobozz.config.template al (no frobozz.config ) frobozz.config y modifique. Solo asegúrese de hacer una copia de seguridad de su directorio de trabajo, si necesita hacer una copia de seguridad de sus cambios locales.