2012-07-18 18 views
6

dire che ho un file in un repo git:Mantenere cambiamenti locali in un repo git

#file.py 

setting1 = default1 
setting2 = default2 

<some code> 

Ora voglio fare alcune modifiche locali che non vengono spinto indietro nella repo

#file.py - local change 

setting1 = mysetting1 
setting2 = mysetting2 

<some code> 

In un futuro futuro, il repository upstream verrà aggiornato e desidero ridurre le modifiche senza compromettere le impostazioni locali. IE un comando git ho potuto eseguire che sarebbe aggiornare il file in modo che sarebbe

#file.py - updated copy 

setting1 = mysetting1 
setting2 = mysetting2 

<new code> 

C'è qualche modo per fare questo, sia con rami o qualche altra caratteristica git in cui non devo mettere le impostazioni locali in un file separato?

Ho visto molte altre domande come questa, ma si concentrano sull'esclusione di un intero file.

Grazie

risposta

2

Date un'occhiata a git stash. È anche un metodo "whole file", ma potresti trovarlo abbastanza flessibile.

In caso contrario, utilizzare git gui e un sacco di ribasature (git rebase --interactive) o cherry-picking (git cherry-pick) o solo un ramo laterale dovrebbe aiutare.

+0

Grazie. In realtà la conservazione ** fa ** l'unione dei file in modo che abbia lo stesso effetto sul file. Trovo di avere una filiale locale e di rifondare per essere il più affidabile in quanto sembra che sia facile perdere una scorta e quindi tutti i miei cambiamenti. – korylprince

+0

Oh, non ho mai inteso implicare che non si fondono. Volevo solo dire che non è possibile salvare una parte delle modifiche (scartando il resto) nel file con un comando. – fork0

+0

L'unico problema con tutti questi metodi è se git merge ha sempre un conflitto se una riga viene aggiunta direttamente sotto una modifica. Per esempio se ho un codice come sopra, e dovrei aggiungere "setting3 = default" sotto setting2 nel ramo di origine, il rebase (o ogni altro metodo) fallirebbe con un conflitto, ma se aggiungo una linea tra i due, fa il rebase o qualunque cosa di buono. Qualche idea del perché? – korylprince

3

Quello che stai facendo è probabilmente cambiare le stringhe di connessione e così via. È qualcosa che è locale al tuo ambiente. Il modo corretto per gestirli è attraverso gli script sbavature/pulite. Dai uno sguardo allo "Git Attributes" chapter in the Pro Git book (disponibile gratuitamente).

+0

Se questo risulta essere quello di cui ha bisogno o meno, grazie per averlo collegato, abbastanza intelligente. – R0MANARMY

+0

Grazie per la risposta. Non penso di aver bisogno di qualcosa di così potente, ma potrebbe diventare utile in seguito. – korylprince