GIT - Code Repository

Hallo Leute,

da das Thema GIT auch für mich relatives Neuland ist, wäre ich für Tips dankbar, wie die konkrete Zusammenarbeit auf Basis von GIT aussehen könnte.

Sollte also schon jemand Erfahrung mit GIT haben, bitte „Best Practices“ hier posten.

Das schöne an DCVS Systemen ist, dass sich jeder einen Fork deines Repositories machen kann, um damit dann weiter an der IPSLibrary zu arbeiten. Dabei kann er alle Funktionen eines CVS wie z.B. Commits/Branching direkt bei sich lokal nutzen (=du brauchst keinen Server wie bei SVN) und kannst dann hinterher deine Änderungen anderen zur Verfügung stellen.

Solange wir direkt alle bei GitHub sind, kannst du das sehr einfach über Pull-Requests machen, die du, als Haupt-Maintainer des IPSLibrary Repositories freischalten kannst. Somit wäre es das Prinzip wie beim Linux Kernel, dass jeder ändern, rumbasteln und testen kann. Aber was in das offizielle Repo kommt entscheidest du (und evtl. Helferlein). Ist dann halt eine Frage von Qualitätssicherstellung.

Sofern man externe Repositories angeben kann, hat halt jeder die Wahl, ob er das offizielle nimmt, oder sich noch weitere externe hinzuschaltet. Soweit ich weiß ist aber der BaseLoader noch nicht für mehrere Repo’s gerüstet :slight_smile:

Dein Vorschlag mit dem Branching war m.E. soweit schon super…

paresy

Hallo Paresy,

ich war mir bis jetzt nicht sicher, ob alle direkten Zugriff bekommen oder auf einem eigenen Branch arbeiten.
Für die Qualität ist es aber sicher am besten, wenn eine kleine Gruppe den Überblick bewahrt…

Was die verschiedenen Repositories betrifft, so arbeite ich derzeit so, dass ich bei mir ein eigenes Verzeichnis habe, wo alle Repositories liegen.
Den IPSModuleManager benütze ich zur Synchronisation mit IPS.

also Änderungen in IPS vornehmen, danach ins Repository kopieren, Änderungen nochmals mit dem GitClient kontrollieren und dann commiten.


   IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager");
   $moduleManager = new IPSModuleManager('IPSLogger');
   $moduleManager->DeployModule('C:\IPS\GIT\IPSLibrary (Test)');

Analog kann man bei der Load Prozedur auch ein beliebiges Repository angeben (Local oder auch Remote).

Gewöhnlich erstellt jemand in github o.ä. ein Repository, auf das alle per default lesezugriff haben. Schreibzugriffe sollten nur dediziert an Leute gegen werden, die ersten wirklich was beitragen und zweitens auch damit umgehen können. Man kann es auch so machen, das jeder nur seinen eigenen Branch beschreiben kann. Es steht dann jedem frei, Commits aus anderen Branches in seinen eigenen Branch zu übernehmen und dort weiterentwickeln. Dann kann der Originalauthor überlegen, ob er diese Änderungen wieder zu sich übernimmt oder nicht (merge/cherrypick)
Tommi

Für erste würde ich in deinem Repository das --Test-- rauswerfen, und die Branching-Funktion nutzen, die GIT/GitHub direkt anbietet :slight_smile:

Jetzt gibt es mehrere Möglichkeiten, wie man weiterarbeiten kann.

Entweder du forkst dir das IPSLibrary bei dir selbst noch einmal, welches du z.B. IPSLibraryDev nennst, und arbeitest dort drin… oder du bleibst innerhalb von IPSLibrary und erstellst dir einen dev Branch in dem du arbeitest.

Ich z.B. würde dann demnächst das IPSLibrary/master in mein Repository forken (wäre dann paresy/IPSLibrary). Dann etwas daran verändern oder ein Zusatzmodul entwickeln und dir dann einen Pull-Request senden (dabei kann ich den entweder nach IPSLibrary/master oder IPSLibraryDev/master senden. Quasi je nachdem ob wir es direkt in den Release Pfad schieben oder erstmal in deinen Testpfad testen wollen.)

Innerhalb von IP-Symcon würde ich dann mit meinem eigenen paresy/IPSLibrary Fork arbeiten… und mir selber dann wieder die Änderungen die du und andere machen in mein paresy/IPSLibrary zurückmergen.

Klingt kompliziert… Ist es aber nicht :slight_smile:

paresy

PS: Das ist jetzt nur eine Idee, wie ich es machen würde. Natürlich gibt es noch 100 weitere Möglichkeiten. Wie sehen die anderen das?

Ok, klingt schlüssig für mich, werd mir das mal ansehen…

Habe diese Woche ein neues Repository angelegt, das zukünftig die offizielle IPSLibrary repräsentieren könnte:

https://github.com/brownson/IPSLibrary

Meine Entwickelungen werden auf meinem Development Branch laufen, den ich regelmäßig (bzw. bei Fertigstellung eines Modules) wieder zurück auf den Original bringen werde.

https://github.com/brownson/IPSLibrary/tree/Development

Das ursprünglichen Test Repositorygibt es nach wie vor, ich werde aber keine großen Änderungen mehr darauf vornehmen.

In dem neuen Repositry steht im Baseloader noch „Test“

$remoteRepository = 'https://raw.github.com/brownson/IPSLibrary--Test-/master/';

Danke, habs ausgebessert, Ende der Woche werd ich auf meinem Developer Branch auch wieder eine neue Version commiten, die bereits die Deinstallation von Modulen beherrscht.