Android und Git

  • Antworten:10
  • Bentwortet
Dani Sahne
  • Forum-Beiträge: 107

29.08.2013, 03:48:11 via Website

Ich möchte mit 2 weiteren Leuten eine App entwickeln, damit wir uns nich immer mühsam den aktuellen Code per Mail verschicken müssen, würden wir gerne Git(Hub) einsetzen. Stellen wir uns mal folgende 2 Szenarien vor:

1Szenario 1:
2Ich arbeite an Activity_1.java und activity_1_layout.xml
3Hans arbeitet an Activity_2.java und activity_2_layout.xml
4Franz arbeitet an Activity_3.java und activity_3_layout.xml

1Szenerio 2:
2Ich arbeite an Activity_1.java und activity_1_layout.xml und strings.xml
3Hans arbeitet an Activity_2.java und activity_2_layout.xml und strings.xml
4Franz arbeitet an Activity_3.java und activity_3_layout.xml und strings.xml

In Szenario 1 kann jeder sich einen eigenen Branch erstellen, nachdem jeder mit dem Bearbeiten seiner Activity fertig ist wird alles wieder ins mainrepo gemerged.

In Szenerio 2 passiert fast das gleiche wie in Szenario 1, aber was passiert mit der strings.xml die alle bearbeiten?
Wird: Die neuste Version genommen
Alle Versionen übernommen(wird aber chaotisch in der .xml)
Gar keine Version genommen?

PS: Da ich mich noch relativ wenig mit Git(Hub) auskenn wäre ich euch dankbar für ein paar Lesetipps, vorallem zur Integration von Git in Eclipse. Ich weiß das Google haufenweise Ergebnisse liefert, aber so richtig wissen wie ich das jetzt machen soll weiß ich auch nicht.

Mfg Dani Sahne

— geändert am 29.08.2013, 04:00:07

Antworten
Stefan J.
  • Forum-Beiträge: 30

29.08.2013, 12:18:07 via Website

Hallo,

wenn mehrere Leute an derselben Datei arbeiten, kann es dann beim Zusammenführen Konflikte geben, die man auflösen muss. Teilweise kann das automatisch mithilfe eines Merge-Tools geschehen, ansonsten muss man das per Hand machen. Also man bekommt verschiedene Versionen der Datei angezeigt und muss dann für jeden Konflikt entscheiden, welche Version genommen werden soll.

Kannst am besten mal nach "git konfliktmanagement" oderso googlen.

Für Eclipse gibt es das plug-in egit.

Übrigens ist git mMn schwerer zu kapieren als z.B. svn, dafür wohl auch mächtiger/effizienter. Aber wenn svn euch reichen würde solltet ihr vielleicht besser das benutzen.

grüße

— geändert am 29.08.2013, 12:22:17

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

29.08.2013, 13:14:49 via Website

...und wenn es nicht unbedingt GIT sein muss, könntet ihr ein System verwenden, bei dem diese Konflikte von vorne herein vermieden werden, auch wenn alle Beteiligten "gleichzeitig" an einem Projekt arbeiten.

Beispiel wäre SVN mit aktiviertem Locking.

Antworten
unklar
  • Forum-Beiträge: 2

29.08.2013, 13:29:32 via Website

Hallo,
wie das mit dem Eclipse Plugin abläuft kann ich dir nicht sagen, da ich alles mit git über die Konsole mache.
Das sollte nicht das Problem sein.

Wenn ich mit mehreren Leuten mit git arbeite läuft das wie folgt ab:
  • Als erstes erstellt irgendwer (in deinem Fall auf github) das Initial-Repository. Also einfach euer Android-Projekt in github hochladen.
  • Dann Clonen alle das Repository ( git clone deine-clone-url )
  • Dann macht jeder seine Arbeit und wenn er meint, dass es so weit ist es hochzuladen. Also muss man git sagen, was geändert wurde (git add Datei.java). Dann einfach einen Commit erstellen (git commit -m "BlaBla Geändert" )
  • Damit es auch hochgeladen wird muss man noch Pushen ( git push ) Jetzt kann es sein das jemand anderes schon was geändert hat, in der Zeit. Dann fordert git dich auf noch mal zu pullen (git pull) Wenn es zu Änderungen an der selben Datei gekommen ist versucht git das automatisch zusammenzuführen (was auch fast immer klappt), falls nicht kennzeichnet git den Konflikt in der Datei und dann musst du das selber beheben (keine Angst, nicht schwierig). Dann wenn alles geklappt hat kannst du pushen. Das mit den Branches funktioniert in dem Fall alles automatisch.

Die wichtigsten Befehle sind also:
  • git clone <pfad> (Gesamtes Repository runterladen)
  • git add <Datei> (Git sagen welche datei geändert wurde) oder für Faule: git add . (Fügt alle geänderten Datein hinzu)
  • git pull (Lädt alle neuen Datein runter)
  • git commit (Neuen Commit erstellen: Eine Änderung welche in Github angezeigt wird, mit Nachricht was geändert wurde). Wenn man wieder Faul ist nimmt man git commit -m "Nachricht". Dann öffnet sich nicht der Editor wo man extra die Nachricht angeben muss.
  • git push (Lädt alle Commits hoch)
Weitere nützliche Befehle:
  • git status (Zeigt Status an z.B. was noch nicht commited wurde)
  • git diff (Zeigt Unterschied ziwschen der aktuellen und der letzten commiteten Version an)
  • git revert HEAD (Erzeugt commit der letzte änderung wieder Rückgängig macht, falls man mal Quatsch commited hat)
  • git reset --hard HEAD (verwirft alle Änderungen die ein git diff ausgeben würde, falls man irgendwas komisches gemacht hat und nicht mehr genau weiß was o.Ä. dann wird alles rückgängig gemacht was noch nicht gepushed wurde)
  • git log (Zeigt eine Liste der letzten Commits an)

Ihr könnt natürlich auch mit Branches usw. arbeiten aber das kann alles recht kompliziert machen. Daher würde ich es bei einen Master-Branch belassen, welcher immer wieder mit den Änderungen zusammengeführt wird (Wenn ihr das wie oben beschrieben macht läuft das so)

Weitere wichtige Befehle findest du z.B. wenn man bei google nach "git cheat sheet" sucht ;)

Mit dem Eclipse Plugin dürfte dass ähnlich funktionieren vermutlich noch etwas einfacher.

Ich würde euch auf jeden fall empfehlen git zu nehmen. Mit git kann man i.d.R. auch problemlos mit mehreren Leuten an einer Datei arbeiten, solange man nicht sachen von den anderen editiert z.B. du änderst in der Datei Bla.java gerade die Methode xjy(int a) dein Kollege aber auch. Dann kommt es zum Konflikt, Wenn dein Kollege die Datei also eher als du hochgeladen hat wird git meckern, wenn du deine Änderung pushen willst. Dann musst du in der Datei selbst den Konflikt lösen (Einfach mal ausprobieren, damit du weißt wie sowas aussieht). Wenn ihr aber in einer Datei an zwei verschiedenen Stellen arbeitet klappt das automatische Zusammenfügen normalerweise problemlos.

Hoffe ich konnte dir ein wenig Helfen. Ist alles halb so wild, wenn man sich an git gewöhnt hat ;)

Antworten
Dani Sahne
  • Forum-Beiträge: 107

29.08.2013, 17:56:01 via Website

Erstmal vielen Dank für eure vielen hilfreichen Antworten. Ich habe mich bewusst für Git entschieden da man für svn einen eigenen Server braucht.

Also wenn ich das jetzt richtig verstanden habe funktioniert das so:
1strings.xml
2btn_send = senden

1strings.xml von mir bearbeitez
2btn_send = senden
3btn_scan = scannen

1strings.xml von Franz bearbeitet
2btn_send = senden
3btn_settings = Settings

1strings.xml nachdem ich und Franz unsere branches mit dem master-branch gemerged haben
2btn_send = senden
3btn_scan = scannen
4btn_settings = Settings

Naja, das werd ich dann einfach mal ausprobieren müssen. Es ist auf jeden Fall gut zu wissen das Git mir ne Rückmeldung gibt und nicht einfach gnadenlos überschreibt.

Mfg Dani Sahne

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

29.08.2013, 18:15:05 via Website

Überschreiben wäre ja auch fatal, das macht keine Versionsverwaltung - außer man bittet sie darum explizit.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

29.08.2013, 19:07:22 via Website

Ich habe mich bewusst für Git entschieden da man für svn einen eigenen Server braucht.

Wie meinen?
Für git braucht man keinen Server, oder wie ist das zu verstehen?

Du meinst vermutlich, das du das Projekt bei Github (als Server) kostenlos hosten kannst?
Sowas gibts natürlich für svn ebenfalls, spontan würde mir zB "unfuddle" einfallen; google-code wäre vermutlich ebenfalls geeignet, da kenne ich aber die Nutzungsbedingungen nicht genau.

Antworten
Dani Sahne
  • Forum-Beiträge: 107

29.08.2013, 23:27:08 via Website

Mit man braucht keinen Server meine ich man braucht keinen Server, Git kann man ja auch lokal betreiben, z.B. auf meinem PC ist der master-branch, Hans und Franz haben ihre eigenen Branches, damit die dann ihre Änderungen in den master mergen können muss zwar mein PC an sein, aber da ich der "Chef" des Projekts bin muss ich eh alles erst genehmigen.

Sinnvoller ist aber trotzdem GitHub. Gut, SVN, SourceForge, Google Code, Git, irgendwo muss man sich ja für entscheiden.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

30.08.2013, 09:42:51 via Website

Ich wollte dir svn auch nicht "aufschwatzen", sondern nur eine Alternative bzgl. Konflikthandling aufzeigen.

Antworten
Dani Sahne
  • Forum-Beiträge: 107

30.08.2013, 19:25:02 via Website

and dev
Ich wollte dir svn auch nicht "aufschwatzen", sondern nur eine Alternative bzgl. Konflikthandling aufzeigen.

So hab ich das auch nicht verstanden, find es ja auch toll wenn mir jemand Alternativen zeigt.

Meine ursprüngliche Frage ist aber geklärt, somit setz ich mal auf "beantwortet"

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

30.08.2013, 23:13:08 via App

Hallo,
noch ein Tipp:
Wenn du das mit der Konsole bei git vereinvachen willst, dann schau dir mal das Programm Tortoise Git an

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten