Dovrei usare git stash per salvare le modifiche in corso del mio progetto e spingerlo su github per accedere ad altri computer?

19

Lavoro molto spesso su alcune caratteristiche del mio progetto che ho bisogno di fare una pausa prima che sia abbastanza buono per un commit. Tuttavia, uso quotidianamente due computer diversi per codificare (il mio portatile e il desktop del mio laboratorio di ricerca). Es .: Sto lavorando a un servizio a casa, poi mi fermo e vado al mio laboratorio.

Non voglio mescolare la sincronizzazione cloud (ad esempio Dropbox) con il monitoraggio remoto GitHub.

Ho semplicemente commesso stati incompleti (e disordinati) del mio codice prima (e lo ho spinto) solo allo scopo di spingerlo nell'altro computer per continuare il lavoro. Sono abbastanza sicuro che questa sia una cattiva pratica.

Oggi, però, ho trovato git stash dopo aver fatto Googling un po '. Sembra la soluzione perfetta per ciò di cui ho bisogno.

Tuttavia, la documentazione non dice se va a github una volta che spingo le mie modifiche. Oltre a questo, voglio sapere se c'è un modo più efficiente per realizzare la mobilità di cui ho bisogno.

Grazie in anticipo!

    
posta Leandro 12.07.2016 - 17:12
fonte

3 risposte

29

I've simply committed unfinished (and messy) states of my code before (and pushed it) only for the purpose of pulling that in the other computer to continue the work. I am pretty sure this a bad practice.

È OK impegnarsi in lavori incompiuti. Svolgi il tuo lavoro in un settore tematico. Impegnati presto e commetti spesso. Leggi su Quando eseguire il commit del codice? per alcune linee guida su quando effettuare un commit. In particolare per Git, esegui il commit su un ramo dell'argomento e spingerlo tutte le volte che vuoi.

Se questo ramo dell'argomento è pensato solo per te, commetti e spinge il codice rotto. Devi solo rinviare il codice a un ramo utilizzato da altre persone. Sentiti libero di rompere il tuo codice.

    
risposta data 12.07.2016 - 17:26
fonte
8

Gli stash sono pensati per l'uso locale, come un luogo temporaneo dove mettere le cose mentre si scherza con i rami.

Se sei l'unico a lavorare su un ramo, non ci sono problemi con il commit di codice non funzionante. Quello che faccio quando in situazioni simili è fare un commit interrotto, poi dopo averlo tirato in un'altra posizione, fai un git reset HEAD~1 per annullarlo. Ovviamente, ciò richiede l'utilizzo di --force su pulls e pushes quando cambi posizione.

O aspetto solo il mio primo commit e faccio un git commit --amend . Oppure sposto solo tutti i commit interrotti quando commetto il branch di funzionalità. O semplicemente non mi preoccupo di alcuni compromessi chiaramente segnalati nella mia storia, perché tendo a non andarmene finché non sarò in una buona sosta. Ci sono molte opzioni.

    
risposta data 12.07.2016 - 18:09
fonte
1

stash non è davvero soddisfacente per nulla se non pulire la directory di lavoro in "unjam your branch"; se non immediatamente stash pop lo stato, le cose diventeranno molto confuse.

Se c'è un lavoro effettivo da salvare, anche se non va bene per una voce di repository permanente, dovrebbe comunque essere un commit. In effetti, non lascio mai la mia directory di lavoro in uno stato che non è sotto controllo di versione - io uso alcuni script Python molto semplici per salva ogni modifica come commit temporaneo. Se vuoi provarlo, ecco cosa fare:

  1. Quando hai svolto un lavoro incompleto e stai per lasciare il posto di lavoro, esegui git-tmp-commit . Impegna automaticamente tutte le modifiche su un nuovo ramo univoco.
  2. Spingi questo ramo su remoto.
  3. Abbandona.
  4. Quando vuoi continuare, clonalo di nuovo dal telecomando. Lo faccio con lo script ccd , che in realtà controlla tutto da zero a una cartella temporanea , scegliendo automaticamente il ramo più recente ... ma puoi anche recuperare e controllare manualmente il ramo temporary-commits/original-branch/YYYY-MM-DD... da un clone esistente del repository.
  5. Infine, "Annulla il commit" delle modifiche con git-tmp-commit -r . Questo ti riporterà al ramo originale (ad esempio master ) e lascerai le modifiche del commit temporaneo nella directory di lavoro, così puoi continuare qui finché non è il momento di un commit appropriato (o temporaneo, se devi partire di nuovo).

Il modo in cui lo script è scritto in questo momento, funziona solo se non ci sono branch master nel repository checkout . Quindi, nel dubbio, dovresti git branch -d master ; questo ovviamente non è proprio l'ideale ...

    
risposta data 12.07.2016 - 23:28
fonte

Leggi altre domande sui tag