2010-01-20 9 views
7

Quindi immagino di avere un repository locale che ho clonato da qualche origine. Al momento del mio clone iniziale, l'origine aveva quattro rami: funzioneA, funzioneB, funzionalitàC e master. Se spingo modifiche all'origine che cancellano il featureA ramo mi aspetto di vedere qualcosa su di esso venga eliminato la prossima volta che numero:Come consentire a Git di avvisarmi sui rami remoti eventualmente eliminati

$ git pull origin

Tuttavia, quello che succede è che io non vedo niente e quando cerco di tirare quel ramo specifico verso il basso con

$ git pull origin featureA

ottengo il seguente errore:

fatal: Couldn't find remote ref featureA
fatal: The remote end hung up unexpectedly

Questo rende totalmente senso, come th Il ramo è stato infatti cancellato dal telecomando, quindi sì, l'arbitro non è più lì, tuttavia mi chiedo perché non sono stato informato di questo fatto. Il mio .git/config per il telecomando è simile al seguente:

[remote "origin"]
fetch = +refs/heads/:refs/remotes/origin/
url = [email protected]:/data/git/perecep.git

ho scritto un piccolo script che utilizza il git ls-remote insieme con l'uscita dal git branch -r a rileva i riferimenti remoti i cui rami non esistono più sul server e mi chiedono se vorrei cancellarli, ma mi chiedo se sto solo facendo qualcosa di intrinsecamente sbagliato qui?

risposta

2

Non penso che tu stia facendo qualcosa di sbagliato. Il tuo ramo locale non dipende dal ramo remoto per esistenza, ed è uno stato di cose perfettamente valido per un ramo remoto da eliminare mentre il tuo ramo locale (con lo stesso nome e apparentemente la stessa storia) per continuare a esistere. È l'approccio "centralizzato" che stai descrivendo, se mai, che sarebbe considerato non ortodosso in Git.

Modifica: tangenzialmente, potresti essere interessato alle opzioni --track e --no-track a git-branch e alla variabile di configurazione branch.autosetupmerge.

+0

sto seguendo un flusso di lavoro più "server centrale" con Git b/c io sono in un ambiente aziendale e questo è come gli sviluppatori per i laptop preferirei condividere il codice (creando branch di argomento pubblico su un server centrale per spingerne le modifiche per la collaborazione) per ora. Dal momento che siamo appena passati da SVN, questo è qualcosa con cui sono più a loro agio. Immagino che la mia preoccupazione sia che dopo aver creato diversi rami effimeri di questa natura che vengono eliminati dopo l'integrazione della funzione/argomento, tutti gli sviluppatori ora hanno tonnellate di ref di filiali remote stantie nel loro repository locale. – NewGitUser

3

Ok, non è necessario un copione speciale. Credo che ho trascurato questo comando

$ git remote prune origin

Dalla pagina man:

 
    prune 
      Deletes all stale tracking branches under . These stale branches 
      have already been removed from the remote repository referenced by 
      , but are still locally available in "remotes/". 

      With --dry-run option, report what branches will be pruned, but do 
      no(sic) actually prune them. 
+0

c'è qualche impostazione che lo fa automaticamente magicamente quando aggiorni il telecomando? – xenoterracide

Problemi correlati