Autor Zpráva
lopikol
Profil
Ahoj.

Potřeboval bych radu ohledně gitu.

Mám hlavní (mester) verzi, kde je aktuální probíhající vývoj programu ve verzi 3.x.x.

V počítači mám ještě verzi 2.x.x, jejíž vývoj je už pozastaven, ale rádi bychom na gitu měli i tuto verzi.

V bashi jsem tedy spustil git branch 2.x.x a přepnul se do této větve pomocí git checkout 2.x.x.

Jenže zde narážim na problém. Jak udělat první commit do této větve, tak aby vůbec nebral v potaz tu master? Zdrojové kody pro 2.x.x mám v jiné složce než je master (3.x.x). A případné nahrazení není možné, jelikož 2.x.x velmi rozdílná od 3.x.x.

V podstatě chci provést to samé jako když vytvořim repozitář a provedu prvotní commit.
Nox
Profil
Opravte mě pokud se pletu, ale řešil bych to tak:

Pokud mezi verzemi nejsou fundamentální rozdíly, tak se afaik používají tagy, ne branche

Pokud je ta 3. verze přepracování a defakto samostatný produkt, tak by obě měly mít samostatné repo

Branche jsou na vývojové větve, viz třeba http://nvie.com/posts/a-successful-git-branching-model/
lopikol
Profil
Když třeba vemu v potaz Nette, tak mezi vývojovou verzí (2.1-dev) a prvotní verzí (0.9.x) je mnoho velkých rozdílů a přesto je to jedno repo.
https://github.com/nette/nette
Nox
Profil
Pravda

No ale ve větvi máš to, co tam chceš mít ... co myslíš tím "nebral v potaz tu master"?
Lopikol
Profil *
To jsem možna psal zbytečně. Jen jsem nepřišel na příkazy, které mi umožní ten prvotní commit do nové branche z jine slozky. Master větev (bash) je nyní ve složce /c/projekty/java/program a ta verze 2.x.x je ve složce /c/users/lopikol/desktop/program-2.x.x. Tak jak ji commitnout do té nové branche?

Snad je to pochopitelné.
Tori
Profil
Lopikol:
Kdy jste začali verzovat, až ve v.3 nebo dřív? Pokud by se dal úplně první commit považovat za společného předka verze 3 a aktuálního stavu verze 2, tak bych přepnula na ten první commit a z něj vytvořila větev pro ver.2.
Jestli ale ty verze nemají už nic společného, tak bude (dle mého nezkušeného názoru) asi lepší samostatný repozitář.

edit: Tohle možná pomůže: http://stackoverflow.com/questions/645450/git-how-to-insert-a-commit-as-the-first-shifting-all-the-others
Jan Tvrdík
Profil
Tori:
Tohle možná pomůže
Tím se mu ale změní hashe všech současných commitů.

Lopikol:
Pominu skutečnost, že lepší bude asi vlastní repozitář a popíši, jak bych to řešil.
1. Smažeš vše ve working directory a nahraješ tam tu starou verzi.
2. Změny commitneš (tj. vytvoříš commit, který smaže verzi 3 a přidá verzí 2)
3. Pomocí příkazu git cat-file commit HEAD získáš tree hash toho nově vytvořeného commitu
4. Pomocí příkazu git commit-tree 331daf69dfa6340a17ae3abc3fa9a2a1d208a8ce -m "Version 2.0" (kde ten hash nahradíš získaným tree hashem) vytvoříš nový commit bez rodiče a vypíše jeho hash.
4b. Nyní se přesuneš na ten vytvořený commit příkazem git checkout <hash nového commitu>
5. Označíš si ho větví git branch 2.x.x, vrátíš se zpátky git checkout 3.x.x a zrušíš ten pomocný commit git reset HEAD^ --hard

Napadá mě ještě několik způsobů, jak to udělat jednodušeji, ale tohle mi připadá nejjistější.
lopikol
Profil
Jan Tvrdík:
Díky za odpověd, ale nakonec asi vytvořim nové repo, jelikož mě jedna věc štve.
V 2. kroku vytvořim commit, který je pak vidět v té nové branch, tedy vidím, co jsem smazal a co přidal. :/
Jan Tvrdík
Profil
lopikol:
tedy vidím, co jsem smazal a co přidal
V tom případě jsi to udělal špatně. Ten návod popisuje tvorbu dvou commitů. Nejprve pomocného v kroku (2) a pak toho nového počátečního v kroku (4). Ten pomocný commit je následně posledním příkazem v kroku (5) odstraněn. Protože ten commit z kroku (4) nemá rodiče, tak žádné změny neprovádí.
lopikol
Profil
Jan Tvrdík:
Jedu přesně podle kroků jak si to napsal. A vždy mi ostane ten commit z druhého kroku. Vidim co jsem smazal a co přidal.
K tomu 5. kroku. Nač použít git checkout master, když mi to vždy napíše Already on 'master'?
Jan Tvrdík
Profil
lopikol:
Nač použít git checkout master, když mi to vždy napíše Already on 'master'?
Vidíš a to je podstatná informace. Do postupu se vloudila chyba, pochopitelně se musíš na ten nově vytvořený commit z kroku (4) přepnout, jinak si příkazem git branch označíš ten pomocný commit z kroku (2). Doplnil jsem krok 4b.
lopikol
Profil
Jan Tvrdík:
Děkuji Honzo ;) Vše už je ok.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: