2013-03-07 1 views
1

Supposons que scratch est un dépôt distant et bough est une branche de ce référentiel. Cela signifie que l'une des lignes imprimées par git branch -r sera scratch/bough. Si j'exerceraiLe contenu de .git/config après la branche git -t x y/z

% git branch -t twig scratch/bough 
Branch twig set up to track remote branch bough from scratch. 

puis examiner le contenu de .git/config, je vois qu'une nouvelle section a été ajoutée à elle:

[branch "twig"] 
     remote = scratch 
     merge = refs/heads/bough 

La valeur de l'attribut merge peut conduire à croire que il y a un fichier .git/refs/heads/bough, mais en fait il n'y a pas un tel fichier. Mais il est maintenant un fichier .git/refs/heads/twig:

.git/refs 
├── heads 
│ ├── master 
│ └── twig 
├── remotes 
│ └── scratch 
│  └── HEAD 
└── tags 

Cela me fait réaliser que soit la ligne merge = refs/heads/bough ne signifie pas pourquoi je pensais que ce fait (OIEau, que la valeur fait référence au chemin, par rapport à .git, de un fichier existant), ou bien il y a un bug assez important dans git. Donc, supposons que le premier cas soit le cas. Que signifie alors la ligne merge = refs/heads/bough?

+0

je viens de devoir +1 votre question à cause de 'scratch/HEAD' xD –

Répondre

4

La ligne merge fait référence à un ref présent dans le dépôt à distance, pas dans le repo local. La branche locale en amont pour twig va en fait être refs/remotes/scratch/bough.

Et pour l'enregistrement, toutes les références ne vivent pas en tant que fichiers dans .git/refs. Vous pouvez également avoir des références groupées qui résident dans .git/packed-refs.

1
[branch "twig"] 
    remote = scratch 
    merge = refs/heads/bough 

Ce bloc signifie ce qui suit: La locale branche twig est réglée pour avoir une branche amont bough sur la scratch à distance, à savoir scratch/bough est la branche de suivi à distance. Ainsi, par exemple quand vous poussez tout en étant sur twig il poussera à scratch/bough.

Questions connexes