Parę pytań do znawców o branche i initial commity w gicie

Adam Osuchowski adwol at zonk.pl
Mon Apr 1 19:22:42 CEST 2013


Nie do końca rozumiem się jeszcze z tym narzędziem więc mam parę pytań
z prośbą o wyjaśnienie. Zauważyłem w PLDowych repozytoriach, że
w poszczególnych modułach istnieje po kilka initial commitów (bez parenta).
Część z nich jest przypisana do branchy ale niektóre nie. Np. dla coreutils:

    $ git rev-list --max-parents=0 --all
    9cf1593a28075883f1880131ea15f9c6e046986b
    5a006e8adf4446d30b3681b146cdb35f914ef29b
    a30b82d494633d30a65fa15f06b33724068ba98e
    $ git branch -a --contains 9cf1593a28075883f1880131ea15f9c6e046986b
    * master
      remotes/origin/DEVEL
      remotes/origin/HEAD -> origin/master
      remotes/origin/RA-branch
      remotes/origin/master
    $ git branch -a --contains 5a006e8adf4446d30b3681b146cdb35f914ef29b
      remotes/origin/AC-branch
    $ git branch -a --contains a30b82d494633d30a65fa15f06b33724068ba98e
    $

Zastanawiałem się, jak stworzyć takiego commita bez parenta i bez brancha
i udało mi się to zrobić za pomocą git-commit-tree, rzeczywiście nie ma
parenta, jednakże nie jest on pokazywany przez git-rev-list, a git-fsck
znajduje go jako sierotę: 

    $ git write-tree
    d936ff7c9b575ca10f16a26b6ec7ec4087f1dd44
    $ git commit-tree -m test d936ff7c9b575ca10f16a26b6ec7ec4087f1dd44
    bb2ef6a355614ee670a230264711a2dc53676434
    $ git log --format=raw bb2ef6a355614ee670a230264711a2dc53676434 | grep parent
    $ git rev-list --all | grep bb2ef6a355614ee670a230264711a2dc53676434
    $ git fsck
    Checking object directories: 100% (256/256), done.
    Checking objects: 100% (1225/1225), done.
    dangling commit bb2ef6a355614ee670a230264711a2dc53676434
    $

Mam więc w związku z tym następujące pytania:

1. Czy legalne dla gita jest wiele initial commitów w obrębie jednego brancha?
2. Czy legalne dla gita jest istnienie commitów poza branchami?
3. Czy taka sytuacja, że jest wiele initial commitów i niektóre nie są
przypisane do żadnego z branchy, a wszystkie pokazywane są przez git-rev-list
jest skutkiem migracji z cvsa (cvs2git zainicjował w taki dziwny sposób
repo) czy można ją uzyskać również normalnie?
4. Dlaczego git-rev-list --all nie pokazuje ręcznie stworzonego commita bez
parenta i co zrobić, żeby pokazywał?
5. Czy da się wylistować faktycznie wszystkie commity w repozytorium?

Z góry dzięki za wyjaśnienie.


More information about the pld-devel-pl mailing list