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).