Portál AbcLinuxu, 5. května 2025 15:11

Dotaz: GIT checkout podstromu

10.3.2008 08:05 Gero
GIT checkout podstromu
Přečteno: 761×
Odpovědět | Admin
Ahoj všem!

Mám takový specifikcý problém a byť
se už nějakou dobu vrtám po netu a v manuálech,
tak nemohu najít svoji jednoduchou odpověď (jestli ano a jak).

Mám totiž jedno velký SVN repo se spoustou projektů
a podařilo se mi pomocí git-svn udělat kompletní
port do gitu. No hotový bájo.

Jenže přece jenom gitový repo zhruba o velkosti
toho kernelovýho není nic moc, obzvlášť pokud ty
projekty spolu souvisej pouze nepřímo, ne-li vůbec.

Takže otázka je jedonduchá.

Zda jde udělat git-clone/checkout tak, jako u svn
je možné udělat working copy jen určité části podstromu?

Pokud znáte někdo odpověď, tak se prosím podělte ;-)
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.3.2008 08:17 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: GIT checkout podstromu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co ti brání založit si git repository pro každý z těch projektů zvlášť?
10.3.2008 09:08 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
amigo, to právě chci udělat

kdybych to věděl, tak se neptám - asi sem to měl víc zdůraznit xD
jenže otázka napsaná nahoře zní "JAK?"

byť se to snažím najít poctivě v dokumentaci,
tak pořád s gitem dělam jenom chvilku...

víš o něčem?

díky

p.s.: můžu udělat nový repo a dát tam poslední kód,
  ale když to mám v jiném GIT repu včetně historie,
  tak proč to nemít i v novém
10.3.2008 09:23 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: GIT checkout podstromu
No, vzhledem k tomu, že nemám podobný projekt na kterém bych to odzkoušel, tak to vezmi spíš jako tip.

Dejme tomu že máš velkou repository s více projekty, kterou aktualizuješ odněkud jinud. Git má svůj skrytý adresář vždy na nejvyšší úrovni repository, takže když založíš repository v některém z podadresářů (projektu) tak by to nemělo vadit. Repository založíš jednoduše příkazem
git init
Pouze po aktualizaci "velké repozitory" to bude chtít nejspíš příkazem
git commit -a
odeslat případné změny i do gitu pro příslušný podprojekt. S ním pak můžeš normálně pracovat jako se samostatnou repository.

Pro více informací doporučuji pročíst tutoriál a další dokumentaci.

Já využívám podobně git ke stahování zdojáků z cvs a svn. Data v notesu pak už aktualizuji pouze příkazem git fetch
10.3.2008 09:24 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: GIT checkout podstromu
Samozřejmě je třeba do založené repository také přidat obsažené soubory, ale o tom více v té dokumentaci..
10.3.2008 11:28 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
Věřte mi, že jsem se snažil prolézt tu dokumentaci opravdu pořádně
jinak bych se ani neptal..

viz můj skript

jen bych rád věděl, jeslti není náhodou něco jednoduššího
neví někdo??
10.3.2008 11:32 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
p.s.: ad vaše myšlenka

je dobrá a ověřil jsem, že by mohla být funkční,
nicméně neřeší "problém" s přenesem historie
10.3.2008 12:47 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: GIT checkout podstromu
a čo tak pre každý (viac/menej) nezávislý vytvoriť branch, kde budú odstránené ostatné projekty ?
10.3.2008 13:16 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
to imho neresi to, ze by v koreni toho substromu byl .git repo a data
porad by tam byla cela ta "oskliva" cesta toho substromu

ale diky za snahu :)
10.3.2008 13:05 graviton
Rozbalit Rozbalit vše Re: GIT checkout podstromu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Napadají mne dvě možnosti:

a) git-svn se dá při zakládání dát konkrétní cesta do svn repozitáře, pak sleduje jen tu

b) hlavní git repozitář se na disku někam zamete pod koberec a člověk si místo working copy podstromu udělá symlink vedoucí přímo do podadresáře v repository. Člověk vidí jen svoje soubory a git si svoje řídící struktury najde též.
10.3.2008 13:21 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
how simple

ad a) .. to uz me taky napadlo (pujdu vyzkouset) 8-)

ad b)     :((((((((((((((((((((((((((((((((((((
ano, je to reseni! .. nejaky (nejsem si jistej jak by to s gitem fungovalo -> commit,pull,merge,..)

kazdopadne diky ^_^
10.3.2008 13:55 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
Hey man! I like you!

Takze pres git-svn to funguje ^_^

avsak, pokd by se dana zalezitost resila ciste git<-->git,
jestli sem to spravne pochopil, reseni nema
(ledaze ja dopisu ten svuj skript nebo nekdo jiny najde/vymysli lepsi reseni)
10.3.2008 22:02 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
presunul jsem puvodni skript do adresare scm/
tak se nedivite, kdyz ten odkaz nebude fungovat

kazdopadne zde muzete stahnout fungujici skript, ktery cely ten checkout z SVNka udela za vas

enjoy
11.3.2008 08:15 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: GIT checkout podstromu
Víš co jsem poněkud nepochopil? V úvodním dotazu jsi psal, že sis vytvořil z původní svn repository jednu git repository. V té svn jsi měl hafo projektů, ok. Ale zcela mimo mě jde, proč jsi stejný koncept přetáhnul i do git? Vždyť stačilo zcela prostě naklonovat jednotlivé projekty, viz. příklad userguide z netpbm..
git-svn clone https://netpbm.svn.sourceforge.net/svnroot/netpbm -T userguide
A dále už pak udržovat pouze jednotlivé projekty čistě v git.
11.3.2008 13:38 Gero
Rozbalit Rozbalit vše Re: GIT checkout podstromu
Hmm.

Jenže já jsem původně vytáhnul celý repo A až potom, co mi to kolega připomenul (páč mě to taky napadlo; viz thready nahoře),
abych zkusil jen checkout substromu (subadresáře) a to funguje! A to je nejdůležitější + je to čisté, jednoduché tak jak jsem potřeboval.

Takže super, problém "svn/subtree -> git" solved. Ale kdyby si věděl,
jak to samé udělat s gitem (git/subtree -> git), tak by to bylo ještě víc super.

1.7.2009 10:25 mambo
Rozbalit Rozbalit vše Re: GIT checkout podstromu

Hm, a co takhle?

git svn fetch remote/svn/xxx/trunk
git merge -s ours --no-commit remote/svn/xxx/trunk
git read-tree --prefix=tmp/ -u remote/svn/xxx/trunk
git mv tmp/xxx/foo bar/foo
git rm -rf tmp
git commit -m "merge xxx.foo project as bar.foo"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.