2012-04-19 12 views
10

Quello che voglio fare è già descritto in that question. Ma voglio risolvere questo problema in un modo pratico e più generico. Quindi l'uso a caso è il seguente:Che cos'è un flusso di lavoro pratico per mantenere le modifiche locali non attivate in git?

  • Ho diversi cambiamenti locali in diversi file web.config, createDb.sql o in qualsiasi altro
  • Non voglio commettere tali file, dal momento che i cambiamenti sono specifici per il mio locale macchina soltanto
  • questi file deve essere la versione controllata e cambiamenti Inoltre sono fatti abbastanza spesso ad alcuni di loro (script SQL in particolare), quindi voglio ricevere aggiornamenti per i file
  • ho faccio vuole impegnarsi tutti altri file
  • Voglio essere in grado di farlo senza attrito, in un unico comando (usando posh-git, in modo da PowerShell è benvenuto)

Il legata-alla soluzione di detto di usare git add -p e che non è pratico, è noioso scegliere sempre pezzi manualmente o forse c'è un modo più conveniente per farlo?

Per esempio, una delle seguenti potrebbe funzionare:

  • se v'è la capacità di filtrare i file che si trovano nella mia copia di lavoro prima di aggiungerli all'indice, qualcosa come git -add -A -EXCEPT web.config crateDb.sql. Quindi posso mappare un alias git a quello e basta.
  • se esiste la possibilità di annullare l'applicazione di scorta. Intendo rimuovere le modifiche contenute in una memoria specifica dalla copia di lavoro. Quindi dovrò fare qualcosa come git stash -deapply prima di ogni commit che va bene.

Il problema è molto comune ed è strano che non ci sia alcuna soluzione al momento. Per esempio. TortoiseSVN ha la funzione "ignore-on-commit", Perforce permette di memorizzare quel tipo di modifiche locali in un elenco di modifiche separato e non inviarlo mai ...

Qualche idea?

+0

In quale altro modo è possibile "controllare la versione" di questi file oltre a confermare le modifiche? In git, commettere _is_ local e _push_ influenza altri computer/repository. Per me, questo odora di una soluzione migliore è qualcosa come [questo] (http://stackoverflow.com/questions/6009/how-do-you-deal-with-configuration-files-in-source-control). –

+0

Ho una soluzione migliore per i file di configurazione - [NConifig] (https://github.com/Yegoroff/NConfig), ma il problema è che non ho solo file di configurazione. – Restuta

risposta

10

si potrebbe provare a fare quanto segue prima del vostro git commit:

git update-index --assume-unchanged web.config crateDb.sql 

Da aiuto git:

--assume-invariata

--no-assume- invariato

Quando questi i flag sono specificati, i nomi degli oggetti registrati per i percorsi non vengono aggiornati. Invece, queste opzioni impostate e annullano il bit "assuma invariato" per i percorsi. Quando il bit "assuma invariato" è attivo, git interrompe il controllo dei file di albero di lavoro per le eventuali modifiche , quindi è necessario rimuovere manualmente il bit per dire a git quando si modifica il file dell'albero di lavoro.A volte questo è utile quando si lavora con un grande progetto su un filesystem che ha una lenta chiamata di sistema lstat (2) (ad esempio cifs).

Questa opzione può essere utilizzata anche come un meccanismo a livello di file grossolana a ignorare le modifiche non salvate nei file cingolati (simile a quello che .gitignore fa per i file non monitorate). Git fallirà (con garbo) nel caso in cui sia necessario per modificare questo file nell'indice, ad es. quando si fondono in un commit; quindi, nel caso in cui il file presunto non tracciato venga modificato a monte, sarà necessario per gestire la situazione manualmente.

+0

Come si comporterà git dopo? Troverà ancora quei file? Se avrò un aggiornamento che accadrà? – Restuta

+0

+1 Risolve il problema. – ralphtheninja

+1

@Restuta I file saranno ancora tracciati da git, ma git li considererà temporaneamente come non modificati, anche se sono stati modificati. Quindi git status ecc non riporterà i file modificati. Usa --no-assume-invariato per annullare il comando e lascia di nuovo a git le modifiche. – ralphtheninja

Problemi correlati