Autor | Zpráva | ||
---|---|---|---|
lopikol Profil |
#1 · Zasláno: 6. 9. 2012, 22:54:18
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 |
#2 · Zasláno: 6. 9. 2012, 23:24:56
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 |
#3 · Zasláno: 6. 9. 2012, 23:46:24
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 |
#4 · Zasláno: 7. 9. 2012, 00:29:37
Pravda
No ale ve větvi máš to, co tam chceš mít ... co myslíš tím "nebral v potaz tu master"? |
||
Lopikol Profil * |
#5 · Zasláno: 7. 9. 2012, 00:43:32
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 |
#8 · Zasláno: 7. 9. 2012, 11:36:12
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 |
#9 · Zasláno: 7. 9. 2012, 12:09:31
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 |
#10 · Zasláno: 7. 9. 2012, 12:59:37
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 |
#11 · Zasláno: 7. 9. 2012, 13:29:20
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 |
#12 · Zasláno: 7. 9. 2012, 13:44:19
Jan Tvrdík:
Děkuji Honzo ;) Vše už je ok. |
||
Časová prodleva: 12 let
|
0