Autor Zpráva
Camo
Profil
Dobrý večer vospolok,
Prosím vás vie mi niekto vysvetliť nasledujúcu vec. Mám stiahnutý repozitár k sebe na local.
1. Urobím zmenu na locale a commitnem -> git commit -am "popis"
2. Urobím zmenu na remote(github) a commitnem
3. Musím to pullnúť na local (predpokladám, že sa to commitne automaticky aj keď neviem????) -> git pull
4. Pushnem to na Github -> git push origin master

No a niekedy dospejem k chybnému výsledku, že sa mi spoja tie zmeny z Githubu so zmenami na locale do jedného súboru. Vyzerá to takto(to zelené v strede sa zlúči):
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>Spoon-Knife</title>
  <LINK href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<p>
<<<<<<< HEAD
Test 13 two changes on remote and local / first pull rewrite n.13 (to history???) and expected n.14
=======
Test 14 two changes on remote and local / first pull rewrite n.13 (to history???) and expected n.14
>>>>>>> 00ced9a9c40466ea146c2aec4dfae2f61ff17c4e
</p>  
</body>
</html>
Tie dva riadky Test 13 a Test 14 majú byť samostatne ako verzie. To <<<<HEAD a pod tam pridáva Git.
Nechápem prečo to robí a už mi z toho prepína.
Ďakujem.
aDAm
Profil
děláš si konflikty které pak musíš vyřešit ručně.
Camo
Profil
aDAm:
Trochu obšírnejšie by som prosil a hlavne ako to vyriešiť.
Jan Tvrdík
Profil
Camo:
Pro začátek by mělo stačit číst, co ti Git píše v konzoli. Dojde-li ke konfliktu (změnám, které nelze automaticky sloužit), tak ti to Git oznámí.
Camo
Profil
Jan Tvrdík:
commit mi píše: "unmerged files, remove the file .git/MERGE_HEAD atď."
Git status píše:
-use pull to merge the remote branch into yours
-fix conflict and run git commit
-use git add <file>
Z toho commit nefunguje resp my vytvorí ten hybrid, add mi nedáva zmysel a pull som spustil. Tak čo sa deje. Ten add má aký zmysel? Add predsa slúži na pridávanie súborou do gitu.
Jan Tvrdík
Profil
Camo:
Tu chybu by měl psát už ten příkaz git pull. Konkrétněji něco jako

CONFLICT (content): Merge conflict in ...
Automatic merge failed; fix conflicts and then commit the result.


Zároveň (pokud používáš Git Bash) se ti změní stav z (master) na (master|MERGING).

Ruční oprava konfliktu není nic jiného, než že otevřeš soubor obsahující konflikt v editoru a upravíš ho tak, aby konflikt neobsahoval (ty podivnosti jako <<<<<<< HEAD normálně smažeš). Upravený soubor pak commitneš.
aDAm
Profil
případně pokud na to máš appku tak ta ti ten konflikt dokáže zobrazit a optá se tě co je ok a co se má zahodit, případně ručně dopíšeš, pak označíš jako fixed a uložít a commitneš/pushnes
Camo
Profil
Jan Tvrdík:
Ten pull také niečo písal, ale ako inak som mal spojiť local s Githubom?
To zmazanie nepomohlo resp bolo to nutné, ale stále som tam mal to (master|MERGING). Aj status písal "you are still merging". Kým to tam bolo nemohol som robiť nič. Nakoniec som skúsil to add index.html a potom commit -a a zdá sa, že to funguje. aj história je zachovaná. Plus ešte som pred tým zmazal index.lock v .gite. Ale ten lock neviem aký mal na to vplyv. možno by stačilo len to add index.html.

Ale stále nechápem, prečo je s tým problém. Veď zmeny sa vykonávajú bežne aj na locale a zároveň na Githube nie? To nemôže predsa takto fungovať.

aDAm:
Práveže apku nemám. Musím to robiť cez bash.
Kajman
Profil
Camo:
Veď zmeny sa vykonávajú bežne aj na locale a zároveň na Githube nie?

Kolize je většinou ve chvíli, kdy dva commity (např. dva vývojáři) chtějí upravit stejný řádek, ale nemají ještě přijmutou změnu toho druhého. Takže prvnímu se to povede, druhý neměl aktuální stav a chce poslat úpravu stejné části kódu - ale verzovací systém nedokáže takovou kolizi vyřešit sám, to musí programátor, co tomu rozumí.
Camo
Profil
Kajman:
"to musí programátor, co tomu rozumí"
To zjavne ja nie som...

Na jednom repozitári sa mi to podarilo odstrániť aj história je cca ok, ale na druhom(a myslím, že tým istým postupom) mi píše: Updates were rejected because a pushed branch tip is behind its remote counterprat. Check out this branch and integrate the remote changes(e.g. git pull ... - to som urobil) before pushing again. See the 'Note about fast-forvards' in git push --help' for details

No ja idem študovať dokumentáciu, a keby niekto vedel čo sa to u mňa deje, tak sa ozvite prosím.
juriad
Profil
Silně doporučuji přečíst si: http://git-scm.com/book/cs (česky). Přečti si i ty části, které se tě teď netýkají, pomůže to pochopit celý koncept Gitu.
Jan Tvrdík
Profil
Camo:
keby niekto vedel čo sa to u mňa deje, tak sa ozvite prosím
Děje se to, že voláš příkazy, jejich chování nechápeš a divíš se, že výsledkem je něco jiného, než co očekáváš.

Ze zdrojů o Gitu doporučím:
gitref.org
www.atlassian.com/git/tutorial
Snipo
Profil
Doplním, že ak sa o git nechceš veľmi zaujímať a chceš ho len používať tak by sa ti mohol hodiť program SourceTree. Používam ho v spojení s BitBucket a žiadny problém. Všetko je to zadarmo.
Camo
Profil
juriad:
To práve čítam ale má to 240 strán a je to fakt nezáživné čítanie a som na 50 strane.
Jan Tvrdík:
Takže nevieš?
Jan Tvrdík
Profil
Camo:
Takže nevieš?
Já vím všechno =) Rady jsi dostal, ale bez pochopení konceptu to stejně nemá moc smysl. Zkusím ti to stručně zopakovat:

1. Co je konflikt a proč k němu dochází vysvětlil [#9] Kajman.
2. Pokud nastane při libovolné operaci problém, tak ti to Git oznámí. Zároveň ti vždy stručně poradí, jak daný problém vyřešit.

Přidám pár dalších tipů:
1. Pokud ti dělá problém git pull, tak na ten příkaz úplně zapomeň a používej jenom dvojici příkazů git fetch a git merge.
2. Přidej si do Gitu nový příkaz git graph pomocí
git config --global alias.graph 'log --graph --decorate --oneline --all -40'
a tento příkaz volej před a po každém příkazu. Chápat jak v každém okamžiku vypadá graf je základem chápání Gitu.
Camo
Profil
Jan Tvrdík:
Tak som ťa predsa dostal tým "nevieš" ;)
Ono by mi úplne stačilo, keby ten pull nerobil merge dvoch posledných súborov. Je tam taká voľba či nie? Lebo mi to normálne celú históriu prenesie(a v tej histórii sa obsah nespája), len posledný commit je spojením tých dvoch vetiev(local a remote). Tak to aspoň na tom git graphe vyzerá - ako vetvy. Zatiaľ som sa stále nedočítal viac.

Ten fetch som skúšal s ešte menším úspechom. Dúfam, že sa o ňom ešte dočítam, v tej docu , že som ho už neprešiel...

A čo sa týka tej nápovedy, tak akurát ten push napovedá použiť pull...

No a díky.
Alphard
Profil
Camo [#16]:
Možná přesně nechápu problém, ale jaké chování by se vám líbilo? Git se logicky snaží synchronizovat celý repozitář, defaultně vzhledem k nejaktuálnější verzi. Pokud se projekt edituje tak nešikovně, že běžně vznikají konflikty, musí se vyřešit ručně. To je podstata, pokud nechcete mergovat, co vlastně chcete?
Camo
Profil
Alphard:
Aby to bola prostá časová snímka súboru. Ešte s tým nemám skúsenosti, ale to automatické zlučovanie nedáva zmysel. Ja potrebujem len to aby som sa mohol vrátiť k predošlej verzii. To je podľa mňa podstata nie zlučovanie, ktoré aj tak bude ťažko dávať zmysel. Ten zmysel tam nevidím.
Alphard
Profil
Něco jako force pull stackoverflow.com/a/8888015?
Každopádně jestli jde jen o archivaci a nechcete repozitáře mergovat, tak si je udržujte odděleně. Jako kolegové výše nechápu, co vlastně chcete.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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