Git merge

Pracuje z kolegą na gicie.

Jak sobie radzicie z kwestią pracy na jednym pliku w tym samym czasie przez dwie osoby. Bo git merge zostawia komentarze i trzeba je ręcznie usuwać. Są na to jakieś inne sposoby? Narazie sobie radzimy przez nie wchodzenie sobie w drogę.

[quote=regedarek]Pracuje z kolegą na gicie.

Jak sobie radzicie z kwestią pracy na jednym pliku w tym samym czasie przez dwie osoby. Bo git merge zostawia komentarze i trzeba je ręcznie usuwać. Są na to jakieś inne sposoby? Narazie sobie radzimy przez nie wchodzenie sobie w drogę.[/quote]
Czemu kazdy nie ma swojej osobnej branchy ktora jest mergowana do master po skonczeniu pracy ?

Jezeli chodzi o git to dla mnie ten projekt jest bezkonkurencyjny jezeli chodzi o zarzadzanie wiekszym projektem

jakiś zaawansowany flow nic im nie da, kłopot jest taki, że edytując jeden plik w tym samym miejscu jest duża szansa na konflikt, gałęzie nic tu nie pomogą.

@regedarek: konflikty zawsze się pojawią, commitujcie często i powinno być ok. możecie edytować ten sam plik, problem jest tylko jak edytujecie te same miejsca. co do tych “komentarzy”, to przy merge’u musicie wybrać, który kod ma być aktualny, powinniście to usunąć przed scommitowaniem merge’a.

[quote=drogus]jakiś zaawansowany flow nic im nie da, kłopot jest taki, że edytując jeden plik w tym samym miejscu jest duża szansa na konflikt, gałęzie nic tu nie pomogą.

@lewy313: konflikty zawsze się pojawią, commitujcie często i powinno być ok. możecie edytować ten sam plik, problem jest tylko jak edytujecie te same miejsca. co do tych “komentarzy”, to przy merge’u musicie wybrać, który kod ma być aktualny, powinniście to usunąć przed scommitowaniem merge’a.[/quote]
Captain obvious :wink:

Przeciez rozumiem na czym polega problem co nie zmienia faktu ze gitflow pomaga w malych/srednich/duzych projektach

to miało być regedarka, źle skopiowałem nick :wink:

Ehh, i jeszcze kiedy chciałem zrobić git pull wyskoczył bład error: Your local changes to 'Gemfile.lock' would be overwritten by merge. Aborting..
jak tego gita spokojnie używać, pomógł tylko git clone od nowa :expressionless:

Przed pull push merge checkout używaj “git status” i jeśli masz modyfikacje to masz 3 opcje:

  1. git commit (wbicie zmian)
  2. git reset --hard (pozbycie się zmian)
  3. git stash save (przechowaj tymczasowo zmiany) potem git stash apply

Opcja 3 jest praktyczna gdy np pojechałeś z koksem w złym branchu i zorientowałeś się dopiero przed commitem. Stash, zmiana brancha na właściwy, apply i właściwy commit.

[quote=regedarek]Ehh, i jeszcze kiedy chciałem zrobić git pull wyskoczył bład error: Your local changes to 'Gemfile.lock' would be overwritten by merge. Aborting..
jak tego gita spokojnie używać, pomógł tylko git clone od nowa :|[/quote]
Raczej rzadko się zdarza sytuacja, żeby trzeba było klonować repo, żeby sobie z nią poradzić :wink:

Ten komunikat mówi Ci, że masz zmiany w Gemfile.lock (“local changes”) i że jeżeli chcesz zrobić pull, to musisz to najpierw scommitować.

[quote=regedarek]Ehh, i jeszcze kiedy chciałem zrobić git pull wyskoczył bład error: Your local changes to 'Gemfile.lock' would be overwritten by merge. Aborting..
jak tego gita spokojnie używać, pomógł tylko git clone od nowa :|[/quote]
uzywaj ‘git pull --rebase’ albo ‘git fetch’ i potem ‘git rebase’

@regedarek:

  1. W codziennej pracy nie merge’uj, tylko rebase’uj.
  2. Jak masz dużo konfliktów, to pewnie wygodniej Ci będzie korzystać z git mergetool
  3. Przeczytaj sobie „Pro Git” Scotta Chacona - http://progit.org/

Nie nie nie nie i nie :slight_smile:

Jak ktoś jest początkujący to robienie rebase’ów lepiej sobie odpuścić, co mu to pomoże tak naprawdę? Że nie będzie miał merge commitrów?

W ogólności: tak - jedynie wygląd historii się zmieni. To jednak jest dobra praktyka, którą należy od początku stosować.

Ale w tym konkretnym przypadku akurat dostałby info, że ma uncommited changes, zrobiłby commita swoich zmian, puścił pulll --rebase i wszystko byłoby cacy. Pewnie nawet by konfliktów nie było. A tak nie zrozumiał komunikatu i musiał klonować repo.

Nie nie nie nie i nie :slight_smile:

Jak ktoś jest początkujący to robienie rebase’ów lepiej sobie odpuścić, co mu to pomoże tak naprawdę? Że nie będzie miał merge commitrów?[/quote]
Da mu mniej konfliktow i ich łatwiejsze rozwiazywanie. W czym rebase moze zaszkodzic poczatkujacemu? GitHub wydajać swoją appke (ktora jest raczej dla poczatkujacych) tez wybrał taki sposob “synchronizacji”

pull --rebase powoduje więcej konfliktów niż merge. Oraz może bardzo zaszkodzić początkującemu i repozytorium – rebase robiony nieumiejętnie wiąże się z ryzykiem zgubienia commitów (oraz kodu).

$ git plre Gemfile: needs update refusing to pull with rebase: your working tree is not up-to-date

[code]$ git pull origin staging
From github.com:drogus/stoliczku

  • branch staging -> FETCH_HEAD
    Updating f569db6…cc78c01
    error: Your local changes to ‘README’ would be overwritten by merge. Aborting.
    Please, commit your changes or stash them before you can merge.[/code]
    Sorry, ale nie wiem dlaczego niby rebase jest w tym wypadku lepszy jeżeli chodzi o komunikaty.

Jak używać? Trzeba się go najpierw nauczyć. Przynajmniej podstawy. A do konfliktów musisz przywyknąć. Można próbować zmniejszyć ich ilość, ale nie da się ich całkowicie wyeliminować. Programowanie to nie magia, to zwyczajne napier***.

Oj radarek, radarek. BTW - dawno Cię nie było.

O to chodziło :wink: chciałem się dowiedzieć czy da się je wyeliminować :slight_smile: Nie da się spokojnie, poradzę sobie :wink: dzięki za wskazówki, pzdr

Są systemy wersji gdzie można sobie lockować prawa do edycji pliku. Nie wspominam ich miło ale rozwiązuje to ten problem.

Lol. Skąd ten pomysł?

Oczywiście, jak wszystko robione nieumiejętnie. Brzmi jak ostrzeżenie z instrukcji ekspresu do kawy, że można zostać porażonym prądem.