2013-06-06 21 views
5

Ho un file tracking.properties sotto il mio classpath dell'app Java, che può cambiare ogni momento come "seq = 10" a "seq = 17".Come proteggere un file nel repository git da commit dopo il primo commit?

Il file delle proprietà viene ora inserito nel repository github. Spero che il file esista nel repository in modo che altri sviluppatori possano clonarlo e che il file non venga spinto da loro perché il "seq" può cambiare da utente a utente.

ho cercato

git rm --cached -f <file> 

quindi aggiungere tracking.properties a .gitignore, ma il risultato e 'deleteing file proprietà nel repository git. Dovrebbe rimanere lì e consentire solo il commit ONCE-FOR-ALL. È possibile?

risposta

3

Considerare l'utilizzo del modello "modello" per questo.

Controllare il file come tracking.properties.template e aggiungere tracking.properties al numero .gitignore. Quindi, dopo aver controllato il repository, gli sviluppatori devono copiare il file modello su tracking.properties e quindi modificarlo come desiderano. Questo file verrà ignorato e quindi il file non verrà visualizzato come sporco e gli sviluppatori non importeranno probabilmente modifiche.

Ciò non impedirà la modifica del file del modello, ma potrebbe essere una buona cosa - potrebbe essere necessario apportare modifiche ad esso in futuro. L'importante è che le modifiche solo locali a tracking.properties siano possibili senza troppa confusione.

+0

Questo è bello per gli sviluppatori, sicuramente. La mia app dovrebbe essere clonata (github non ha più alcun pulsante di download, quindi clone) anche da non sviluppatori e preferirei non forzarli a copiare e rinominare un file il più possibile ... Esiste un altro metodo più automatico ? – linzhixing

+0

@linzhixing Se devono comunque modificare qualcosa nel file, non è molto più da documentare. Git non ha un concetto per "file tracciato che non cambia" - un file è tracciato o non lo è. Se esiste una sorta di script di installazione, è possibile che lo script si occupi di creare la copia. Altrimenti, potresti documentare il passo. – cdhowie

+0

Grazie! Alla fine ho incluso il comando cp nello script della shell di seup. – linzhixing

2

Se ogni sviluppatore esegue il comando dopo la clonazione repo

git update-index --skip-worktree tracking.properties 

quindi git per sempre dopo trattare il file come se non fosse cambiato a livello locale, anche quando ha.

Se mai c'è bisogno di impegnarsi cambiamenti locali ad esso, è possibile attivare di nuovo al normale come questo

git update-index --no-skip-worktree tracking.properties 

Ancora un'altra alternativa è

git update-index --assume-unchanged tracking.properties 

Here is a good explanation of the subtle differences between skip-worktree and assume-unchanged. Penso che skip-worktree sia meglio per te, dal momento che ignora reset --hard e conserva il flag quando la versione upstream è cambiata.

Problemi correlati