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


20

Lavoro molto spesso su alcune funzionalità del mio progetto che devo fare una pausa prima che sia abbastanza buono per un commit. Tuttavia, uso quotidianamente due computer diversi per programmare (il mio laptop e il desktop del mio laboratorio di ricerca). Ad esempio: sto lavorando a una funzione a casa, quindi mi fermo e vado nel mio laboratorio.

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

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

Oggi, però, mi sono imbattuto git stashun po 'dopo Googling. Sembra la soluzione perfetta per ciò di cui ho bisogno.

Tuttavia, la documentazione non dice se va su github quando invio le mie modifiche. Oltre a ciò, voglio sapere se esiste un modo più efficiente per ottenere la mobilità di cui ho bisogno.

Grazie in anticipo!


1
Sto votando per chiudere questa domanda come fuori tema perché ha già ricevuto una risposta su Stack Overflow
David Arno,

5
@DavidArno: non credo sia un duplicato tra siti. La domanda StackOverflow riguarda "Can I do X" e questa su "X è una buona pratica". Per lo meno la causa principale della domanda è diversa.
Greg Burghardt,

7
@DavidArno l'ultimo che ho controllato, "Già risposto a SO" non è un motivo per chiudere una domanda.
RubberDuck,

Risposte:


28

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

Va bene commettere lavori incompiuti e disordinati. Fai il tuo lavoro in una sezione tematica. Impegnarsi presto e impegnarsi spesso. Leggi su Quando eseguire il commit del codice? per alcune linee guida su quando effettuare un commit. In particolare per Git, impegnati in un ramo di argomento e spingilo tutte le volte che vuoi.

Se questo ramo argomento è pensato per te, esegui il commit e invia il codice non funzionante. Dovresti solo differire dallo spingere il codice rotto in un ramo utilizzato da altre persone. Sentiti libero di rompere il tuo codice.


6
Lo direi anche più forte: non lavorare mai sul ramo principale, usare sempre un ramo argomento. Impegnalo come meglio credi, spingilo senza paura. Quando sei soddisfatto delle modifiche, uniscile al master.
9000,

Ottimo consiglio! Penso che la grande confusione possa accadere perché dobbiamo aggiungere un commento a un commit, e talvolta sarà letteralmente qualcosa come "task in progress" o qualcosa del genere. E sì, sto lavorando da solo in questo ramo, quindi tutto ciò che hai detto ha un senso!
Leandro,

4
Questo ti dà anche la possibilità di schiacciare i singoli commit in uno quando unisci il
snoopy

2
I messaggi di commit di @Leandro dovrebbero essere atomici e chiari come ha senso. Ad esempio, anche se si tratta di WIP, si può dire ad esempio "Aggiunta di controller per gestire le richieste di pagina - WIP". I messaggi di commit forniscono anche una cronologia ricercabile delle modifiche apportate al progetto. Dieci commit di "WIP" non aiuterebbero chiunque, ad esempio, a cercare un cambiamento nella gestione degli utenti.
Ben

7

Gli stash sono destinati all'uso locale, come luogo temporaneo per mettere le cose mentre si scherza con i rami.

Se sei l'unico che lavora su un ramo, non c'è problema con il commit del codice non funzionante. Quello che faccio quando in situazioni simili è fare un commit interrotto, quindi dopo averlo tirato nell'altra posizione, fare un git reset HEAD~1per annullarlo. Naturalmente, questo richiede l'utilizzo --forcesul tuo pullse pushesquando cambi posizione.

Oppure aspetto solo il mio primo commit e faccio un git commit --amend. Oppure schiaccio semplicemente tutti gli commit interrotti quando eseguo il commit del ramo funzione. O semplicemente non mi preoccupo di alcuni commit chiaramente segnalati nella mia storia, perché tendo a non partire fino a quando non mi trovo in un buon punto di sosta. Ci sono tante opzioni.


1
Non consiglierei di abituarmi, --amendquindi è necessario --forceper le spinte. Meglio impegnarsi solo in un ramo usa e getta.
lasciato circa il

1

stashnon è davvero soddisfacente per nulla, ma la pulizia della directory di lavoro per "disordinare il tuo ramo"; se non stash poptorni immediatamente allo stato, le cose diventeranno molto confuse.

Se è necessario salvare il lavoro effettivo, anche se non è utile per una registrazione repository permanente, dovrebbe comunque essere un commit. In effetti, non lascio mai la mia directory di lavoro in uno stato che non è sotto il controllo della versione: utilizzo alcuni script Python molto semplici per salvare ogni modifica come commit temporaneo. Se vuoi provarlo, ecco cosa fare:

  1. Quando hai svolto un lavoro incompiuto e stai per lasciare il posto di lavoro, eseguilo git-tmp-commit. Commetterà automaticamente tutte le modifiche in un nuovo ramo unico.
  2. Spingi questo ramo sul telecomando.
  3. Partire.
  4. Quando vuoi continuare, clona di nuovo quel ramo dal telecomando. Lo faccio con lo ccdscript, che in realtà estrae tutto da zero a una cartella temporanea , scegliendo automaticamente il ramo più recente ... ma puoi anche semplicemente recuperare e verificare manualmente il ramo temporary-commits/original-branch/YYYY-MM-DD...da un clone esistente del repository.
  5. Infine, "annullare il commit" delle modifiche con git-tmp-commit -r. Questo ti riporterà al ramo originale (ad esempio master) e lascerà le modifiche del commit temporaneo nella directory di lavoro, quindi puoi continuare qui fino al momento di un commit corretto (o temporaneo, se devi partire di nuovo).

Il modo in cui lo script è stato scritto in questo momento, funziona solo se non è presente alcun ramo masternel repository di checkout . Quindi in dubbio, dovresti git branch -d master; questo ovviamente non è proprio l'ideale ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.