2010-01-31 17 views
61

He clonado un repositorio y la rama master en mi repositorio está rastreando origin/master. Creé una rama work y cambié algunos archivos de configuración específicos de mi máquina de desarrollo para que la aplicación funcione.Evitar que se realicen cambios locales en Git

Mi flujo de trabajo normal será cambiar a la rama master, fusionar los cambios realizados en work rama y push esos cambios en sentido ascendente. El problema es que no quiero que se aplasten mis cambios específicos. Cuando fusiono mi rama work en master, esos cambios también se fusionan.

La única solución que he encontrado hasta ahora es no comprometer esos cambios en work, pero esa no es una solución satisfactoria.

+1

Tales archivos de configuración no deben estar en el repositorio en absoluto - quitar ellos. –

+0

duplicado de http://stackoverflow.com/questions/2007397/howto-prevent-git-from-pushing-changes-to-some-files – vava

+1

http://stackoverflow.com/questions/655243/ignore-modified-but -not-committed-files-in-git –

Respuesta

80

Si desea evitar la confirmación (por lo tanto, también) de estos archivos de configuración local, puede usar git update-index --assume-unchanged. Se supondrá que los archivos marcados con este distintivo nunca cambian (hasta que restablezca el indicador con --no-assume-unchanged)

+0

¿Qué ocurre con esas configuraciones? archivos cuando pagas en otra rama? – pomber

+0

@pomber AFAIK no son tocados por git. –

5

Una forma de resolver esto es "seleccionar cuidadosamente" cada cambio de su rama de trabajo en maestro antes de empujar hacia arriba. He utilizado una técnica en la que incluyo una palabra como NOCOMMIT en el mensaje del informe de cambios sólo locales, y luego usar un script de shell o menos así:

#!/bin/sh 

BRANCH=`git branch | grep ^\\* | cut -d' ' -f2` 
if [ $BRANCH != "master" ]; then 
    echo "$0: Current branch is not master" 
    exit 1 
fi 

git log --pretty=oneline work...master | grep -v -E '(NOCOMMIT|DEBUG):' | cut -d' ' -f1 | tac | xargs -l git cherry-pick 

Esta cereza-picks cada cambio que se no marcado con NOCOMMIT (o DEPURACIÓN) en la rama principal.

8

Si los archivos aún no están siendo rastreados, puede agregarlos a un archivo .gitignore a su repositorio local, de lo contrario necesitarás usar git update-index --assume-unchanged como dijo Mauricio.

A continuación se presenta más información sobre los archivos .gitignore:

http://git-scm.com/docs/gitignore

0

Lo que necesita es un archivo .gitignore y añadir todo su archivo de configuración en el archivo .gitignore.

vez que el archivo está listo .gitignore es posible que necesite eliminado los archivos de configuración de la caché

Aquí está el comando:

(Assume you use linux) 
vi .gitignore 
//Add all your config file inside 

//run the following command to remove your config file from GIT cache if your config files is already track by GIT 

git rm --cached myconfig.php 
Cuestiones relacionadas