17

Ho visto persone consigliare a tutti gli sviluppatori di impostare un collegamento simbolico sul proprio computer da C:\project\.git\rr-cache a una cartella condivisa \\server\rr-cache.Condividere la cache di rerere

Tuttavia, sembrerebbe più conveniente condividere la cartella includendola nel repository git stesso, se possibile. Ho visto persone menzionare questa soluzione, ma non in realtà come farlo.

Qualche idea?

+0

Se è necessario condividere la cache di rerere l'una con l'altra, è possibile che si verifichino sovrascritture di rami che si ripetono. Penso che la soluzione standard a questo problema non sia quella di condividere le cache, ma di non rebase mai di ciò che è visibile. Quindi tutti possono ripulire i propri problemi di rebase dalle proprie filiali private poiché probabilmente sanno cosa stanno facendo. –

+1

Non è possibile includere la rr-cache nel repository, perché è già presente in esso. Nel caso in cui hai chiesto se è possibile renderlo parte della storia: sì, ma non sembra una buona idea (cambia a causa della modifica della cronologia, non a causa della modifica del contenuto, che Git tiene traccia, e tu hai per impostare il rr-cache tracciato in ogni nuovo repository) – fork0

+0

è vero, ma se lo si imposta tramite script, sei a posto. –

risposta

14

Può essere condiviso tramite un ramo dedicato. Vuoi fermarti se c'è un conflitto su quel ramo e risolverlo perché significa che ci sono stati tentativi di risolvere lo stesso conflitto in 2 modi diversi. Inutile dire che sarà l'eccezione alla regola.

Per gli altri su questa domanda, google "Filiale per funzionalità" per vedere dove questo è utile.

Gli hook possono automatizzare la sincronizzazione del ramo rr-cache comune.

Ecco ciò che è necessario automatizzare. rereresharing è un ramo di esempio a cui si sta unendo, rr-cache è un ramo che memorizza le risoluzioni; tutti questi passaggi hanno lavorato senza alcun problema:

git checkout --orphan rereresharing start-sprint-1 
git --git-dir=.git --work-tree=.git/rr-cache checkout -b rr-cache 
git --git-dir=.git --work-tree=.git/rr-cache add -A 
git --git-dir=.git --work-tree=.git/rr-cache commit -m "initial cache" 
git clean -xdf 
git checkout rereresharing 
git merge --no-ff FTR-1 
git merge --no-ff FTR-2 
vim opinion.txt # resolve conflict 
git add -A 
git commit 
git checkout rr-cache 
git --git-dir=.git --work-tree=.git/rr-cache add -A 
git --git-dir=.git --work-tree=.git/rr-cache commit -m "resolution" 
git remote add origin ../bpf-central 
git push origin rereresharing rr-cache 
cd - # assumes you were previously in the other local repo 
git remote add origin ../bpf-central 
git fetch 
git branch rr-cache origin/rr-cache 
ls .git/rr-cache 
git --git-dir=.git --work-tree=.git/rr-cache checkout rr-cache -- . 
ls .git/rr-cache 

Si è ora pronti a fare lo stesso si fondono e si avrà risolto il conflitto.

+3

È possibile creare un ramo disconnesso per la cache di rr, ad esempio 'checkout --orphan rr-cache'. Sembra più bello – kan

+0

Fantastico! Aggiornerò la risposta .. –

+0

-b e --orphan non sono compatibili con le ultime versioni di git. –

4

Forse invece di condividere rr-cache un'altra opzione sarebbe quella di apprendere le risoluzioni dei conflitti dalla cronologia Git esistente utilizzando rerere-train.sh.

+0

Quando verrebbe eseguito? Ogni volta che si incontra un conflitto di unione? –

+1

Avresti bisogno di eseguirlo ogni volta che qualcun altro ha risolto un conflitto e vorresti abilitare Git a riutilizzare quella risoluzione localmente. – sschuberth