2010-01-31 23 views
61

Ho clonato un repository e il ramo master nel mio repository sta monitorando origin/master. Ho creato un ramo work e ho modificato alcuni file di configurazione specifici per la mia macchina di sviluppo per far funzionare l'app.Impedire che vengano apportate modifiche locali in Git

Il mio normale flusso di lavoro sarà passare al ramo master, unire le modifiche apportate nel ramo work e push quelle modifiche a monte. Il problema è che non voglio che i miei specifici frammenti vengano spinti. Quando unisco il mio ramo work in master anche queste modifiche vengono unite.

L'unica soluzione che ho trovato finora non è quella di trasferire tali modifiche in work ma questa non è una soluzione soddisfacente.

+1

Tali file di configurazione non dovrebbe essere nel repository a tutti - rimuovere loro. –

+0

duplicato di 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 –

risposta

80

Se si desidera evitare di commettere (quindi anche di spingere) questi file di configurazione locali, è possibile utilizzare git update-index --assume-unchanged. Si presume che i file contrassegnati con questo flag non cambino mai (finché non si reimposta il flag con --no-assume-invariato)

+0

Cosa succede con quelle configurazioni file quando esegui il checkout di un altro ramo? – pomber

+0

@pomber AFAIK rimangono intatti da git. –

5

Un modo per risolvere questo è quello di "selezionare con cura" ogni modifica dal ramo di lavoro in master prima di eseguire il push upstream. Ho usato una tecnica in cui includo una parola come NOCOMMIT nel messaggio di commit solo cambiamenti locali, e quindi utilizzare un qualcosa di shell script come questo:

#!/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 

Questo cherry-picks ogni cambiamento che non sia contrassegnato con NOCOMMIT (o DEBUG) nel ramo principale.

8

Se i file non sono già stati tracciati, è possibile aggiungerli a un file .gitignore al proprio repository locale, altrimenti sarà necessario utilizzare git update-index --assume-unchanged come ha detto Mauricio.

seguito è ulteriori informazioni sui file .gitignore:

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

0

Quello che vi serve è un file .gitignore e aggiungere tutti i vostri file di configurazione all'interno del file .gitignore.

volta che il file è pronto .gitignore potrebbe essere necessario rimossi i file di configurazione dalla cache

Ecco il 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 
Problemi correlati