VaidasB rašė:
> nu va kitas pavyzdys/problema.
> kažkas susifakapino kai perkėliau projektą į gilesnį folderį. Pushinant
> gaunu idiotiškus messagus apie bare repozitory ir pan. siūlo daryt
> branchą ir pan, kam man to reik? nu padariau aš tą branch, supushino
> kažkur. ir dabar neesu tikras ar mano kodas guli serveryje ar ne. vietoj
> to kad dirbčiau, kas reikia, turiu aškintis gito "privalumus".
Konkretumas, tai kaip bobos už kampo: kažkas kažką kažkur kažkaip... :-)
Su tokiu konkretumu, tai turi dar mažiau šansų išsiaškinti svn
susifakup'inimo privalumus...
Konkrečiai kas susivėlė ir ką konkrečiai darant? Konkrečiai kokie
klaidos pranešimai?
Bet šiaip jau veikiausiai pražiopsojai _tai_ darydamas git push:
-f, --force
Usually, the command refuses to update a remote ref that is not an
ancestor of the local ref used to overwrite it. This flag disables the
check. This can cause the remote repository to lose commits; use it
with care.
Bet apie viską plačiau; pabandysiu paaiškini esmę:
git push atsisako push'inti, jei remote repozitorija yra su darbine
direktorija ir push'inamas branch'as buvo lokaliai checkout'intas.
Supaprastinus, tai tokiu būdu saugomasi, kad nupush'inus nebūtų
perrašyti remote repozitorijos darbinės direktorijos (ir indekso)
pakeitimai, kurie galbūt net nebuvo commit'inti.
Analogijai tiktų pavyzdys, jei svn'e išsicheckout'intum kokią
direktoriją, joje pridarytum pakeitimų ir paskui ant viršaus (pakeitimų
nenucommit'inus) norėtum vėl išsicheckout'inti kokią direktoriją.
Rizikuoji prarasti pakeitimus ir svn'as to neleistų (nebent nurodytum
--force). Logiška, kad ir git'as to neleidžia, ar ne?
Jei žinai, ką darai ir esi tikras, kad remote repozitorijos darbinės
direktorijos (su išchekout'intu branch'u, kurį ir push'ini) niekas
nekeičia (ten lokaliai niekas nedirba), tai gali kaskart naudoti --force
raktą, tačiau nesiūlyčiau taip daryti ir prie to priprasti.
Kitas variantai (jei remote'e kažkas dirba lokaliai):
- traukti pakeitimus iš tavęs remote pusėje: git pull;
- push'inti į atskirą branch'ą remote repozitorijoje; tas, kas dirba
pats susimerge'ins pakeitimus, kuriuos sustūmei.
Variantai, kai remote niekas lokaliai nedirba (tai — centrinė/serverinė
repozitorija):
- susikurti dummy branch'ą ir į jį persijungti, t.y. jį
išsichek'outinti: git branch dummy; git checkout dummy (tada bus galima
push'inti į šią remote repozitoriją);
- paversti tą remote repozitoriją bare repozitorija, kuri apskritai
neturi darbinės direktorijos. Tą buvo galima padaryti nuo pat pradžių:
git --bare init, o dabar paversti remote repozitoriją į bare galima:
1) pašalinti visus failus (išskyrus .git katalogą), esančius joje;
2) perkelti .git katalogo turinį į pačią repozitorijos direktoriją:
(mv .git/* .);
3) (git config --bool core.bare true).