¿Cómo puedo actualizar (extraer) de forma segura un proyecto git, manteniendo intactos archivos específicos, incluso si hay cambios ascendentes?
myrepo / config / config.php
¿Hay alguna forma de, incluso si este archivo se cambiara en remoto, cuando git pull, todo lo demás se actualiza, pero este archivo no cambia (ni siquiera se fusionó)?
PD. Necesito hacer lo que pido porque solo estoy escribiendo scripts de implementación basados en git. No puedo cambiar los archivos de configuración a plantillas.
Por lo tanto, necesito una forma de escribir scripts de actualización que no pierdan lo que se cambió localmente. Esperaba algo tan simple como:
git assume-remote-unchanged file1
git assume-remote-unchanged file2
luego git pull
config.php
comprometido los cambios ?Respuestas:
Hay una solución simple basada en el alijo Git. Guarda todo lo que has cambiado, saca todas las cosas nuevas, aplica tu alijo.
En stash pop puede haber conflictos. En el caso que describa, de hecho habría un conflicto
config.php
. Pero, resolver el conflicto es fácil porque sabes que lo que pones en el escondite es lo que quieres. Entonces haz esto:fuente
git merge
'nuestro' es lo que está actualmente en el directorio de trabajo. Pero para ungit rebase
(ogit rebase -onto
) el significado puede intercambiarse.git stash , git pull , git stash apply
Puede soltar el alijo con:git stash drop
Una vez quegit stash
.Si tiene un archivo en su repositorio que se supone que está personalizado por la mayoría de los extractores, cambie el nombre del archivo a algo como
config.php.template
y agrégueloconfig.php
a su.gitignore
.fuente
.gitattributes
para mantener siempre sus cambios mientras se fusiona.Actualización: esto literalmente responde a la pregunta formulada, pero creo que la respuesta de KurzedMetal es realmente lo que quieres.
Asumiendo que:
master
master
enorigin
.... Podrías hacerlo:
Puede crear un alias para eso si necesita hacerlo con frecuencia. Tenga en cuenta que si tiene cambios no confirmados
config/config.php
, esto los descartaría.fuente
También podemos probar git pull con rebase
fuente
Para responder a la pregunta: si desea excluir ciertos archivos de un pago, puede usar el pago escaso
1) En
.git/info/sparse-checkout
, define lo que quieres conservar. Aquí, queremos todos (*) pero (observe el signo de exclamación) config.php:2) Dígale a git que desea tener en cuenta el pago escaso
3) Si ya tiene este archivo localmente, haga lo que git hace en un pago escaso (dígale que debe excluir este archivo configurando el indicador "skip-worktree" en él)
4) Disfrute de un repositorio donde su archivo config.php es suyo, independientemente de los cambios que se realicen en el repositorio.
Tenga en cuenta que, una vez que git se hace cargo de un archivo, .gitignore no tendrá ningún efecto.
Dado que, una vez que el archivo está bajo el control de la fuente, solo tiene dos opciones (): - volver a basar todo su historial para eliminar el archivo (con
git filter-branch
) - crear una confirmación que elimine el archivo. Es como pelear una batalla perdida, pero, bueno, a veces tienes que vivir con eso.fuente
En caso de que haya cambios locales no comprometidos y evite fusionar conflictos mientras tira.
consulte - https://happygitwithr.com/pull-tricky.html
fuente