A menudo me encuentro en una situación en la que clono un repository, creo una sucursal local y luego tengo que hacer un trabajo de configuration inicial, que cambia algunos files, antes de poder continuar con los cambios reales que deseo realizar más tarde.
Por ejemplo: he clonado un proyecto de Visual C ++ y he creado la twig local. Ahora tengo que cambiar los directorys include y lib para hacer una reference correcta de libboost. Esto cambia el file .vcxproj
, pero obviamente es un cambio que no quiero enviar a origin/master
. Solo los cambios posteriores son cambios reales.
He considerado usar git update-index --assume-unchanged <file>
, pero eso ignorará todo el file y, por lo tanto, descarta la posibilidad de otros cambios en el file que quisiera confirmar.
¿Cuáles son las soluciones están ahí? Es git rebase
tal vez la solución?
Sí, lo más probable es que git rebase
sea lo que quieres.
Hay muchas forms de hacerlo. Una forma sería comenzar con los cambios que no desea enviar, y cuando haya terminado, use git rebase --interactive
para que pueda reorderar los commits y poner esos cambios no relacionados al final.
Algo como:
Estoy agregando manualmente nombres de twigs (maestros, arreglos y proyectos), aunque puedes hacerlo sin twigs. Por ejemplo, si desea enviar todas las confirmaciones de la twig 'proyecto' como una twig 'arreglos', excepto la última, aunque no tenga esa twig local, puede hacer lo siguiente:
git push origin project^:fixes
Otra opción es tener una twig permanente de 'proyecto' que tenga los cambios locales en '.vcproj.default', y luego tener sus otras twigs basadas en la parte superior:
Después de que haya terminado con su twig 'arreglos', puede volver a establecer la base de su twig antes de presionarla:
git rebase --onto master project fixes
Esto básicamente elegirá los commits de 'proyecto' a 'arreglos' ("Fix 1" y "Fix 2"), y los rebase en la parte superior de master, esencialmente eliminando el commit de "Project change" de la twig.
No estoy seguro de si recibí su pregunta correctamente, pero creo que no es una buena idea colocar un file de configuration que contenga la configuration local directamente en el repository. En su lugar, agregaría un file, digamos .vcproj.default
al repository que contiene definiciones pnetworkingeterminadas para todas las configuraciones. Después de clonar un repository, solo
cp .vcproj.default .vcproj
y luego cambie la configuration que necesita. El file .vcproj
mismo excluiría usando el file .gitignore
.
Los filters pueden hacer que el process sea sencillo. Aquí está la idea básica , obtienes sed para save los valores actuales de la stream ascendente y replacelos con los tuyos en el momento del pago, y save tus valores actuales y replacelos con los de la stream ascendente en la verificación. ¿Puede proporcionar una muestra de los cambios que desea evitar que se filtren?