Ich habe ein bisschen gegoogelt und konnte keinen guten "Anfänger" -Ratgeber für SVN finden , nicht im Sinne von "Wie verwende ich die Befehle?". Wie steuere ich meinen Quellcode?
Was ich klären möchte, sind die folgenden Themen:
- Wie oft verpflichten Sie sich? So oft wie man Ctrl+ drücken würde s?
- Was ist ein Zweig und was ist ein Tag und wie steuern Sie sie?
- Was geht in die SVN? Nur Quellcode oder teilen Sie hier auch andere Dateien? (Nicht als versionierte Dateien betrachtet ..)
Ich habe keine Ahnung, was Zweig und Tag sind, daher kenne ich den Zweck nicht, aber meine wilde Vermutung ist, dass Sie Dinge in den Trunk hochladen und wenn Sie einen größeren Build ausführen, verschieben Sie ihn in den Zweig? Was wird in diesem Fall als wichtiger Build angesehen?
svn
version-control
Filip Ekberg
quelle
quelle
Antworten:
Das Subversion-Buch ist eine hervorragende Informationsquelle zu Strategien für das Layout, die Verzweigung und das Tagging Ihres Repositorys.
Siehe auch:
Setzen Sie die Entwicklung in einem Zweig oder im Stamm fort?
Verzweigungsstrategien
quelle
Ich habe mir die gleichen Fragen gestellt, als wir Subversion hier implementierten - ungefähr 20 Entwickler, verteilt auf 4 - 6 Projekte. Ich habe keine gute Quelle mit der Antwort gefunden. Hier sind einige Teile, wie sich unsere Antwort in den letzten 3 Jahren entwickelt hat:
- so oft wie nötig verpflichten; Unsere Faustregel lautet: Festschreiben, wenn Sie genügend Arbeit geleistet haben, sodass es ein Problem wäre, diese erneut ausführen zu müssen, wenn die Änderungen verloren gehen. manchmal verpflichte ich mich alle 15 Minuten oder so, manchmal kann es Tage sein (ja, manchmal brauche ich einen Tag, um 1 Codezeile zu schreiben)
- Wir verwenden Zweige, wie in einer Ihrer früheren Antworten vorgeschlagen, für verschiedene Entwicklungspfade. Derzeit haben wir für eines unserer Programme drei aktive Zweige: 1 für die Hauptentwicklung, 1 für den noch nicht abgeschlossenen Versuch, das Programm zu parallelisieren, und 1 für den Versuch, es für die Verwendung von XML-Eingabe- und Ausgabedateien zu überarbeiten;
- Wir verwenden kaum Tags, obwohl wir der Meinung sind, dass wir sie verwenden sollten, um Veröffentlichungen für die Produktion zu identifizieren.
Stellen Sie sich die Entwicklung auf einem einzigen Weg vor. Zu einem bestimmten Zeitpunkt oder in einem Entwicklungsstadium beschließt das Marketing, die erste Version des Produkts freizugeben, sodass Sie eine Markierung in den Pfad mit der Bezeichnung "1" (oder "1.0" oder was haben Sie) setzen. Zu einem anderen Zeitpunkt beschließt ein heller Funke, das Programm zu parallelisieren, entscheidet jedoch, dass dies Wochen dauern wird und dass die Leute in der Zwischenzeit den Hauptweg weitergehen wollen. Sie bauen also eine Weggabelung und verschiedene Leute wandern die verschiedenen Gabeln hinunter.
Die Flaggen auf der Straße werden als "Tags" bezeichnet, und an den Gabeln auf der Straße teilen sich die "Zweige". Gelegentlich kommen auch Zweige wieder zusammen.
- Wir stellen alles Material, das zum Erstellen einer ausführbaren Datei (oder eines Systems) erforderlich ist, in das Repository. Das bedeutet mindestens Quellcode und Make-Datei (oder Projektdateien für Visual Studio). Aber wenn wir Symbole und Konfigurationsdateien und all das andere Zeug haben, geht das in das Repository. Einige Dokumentationen finden ihren Weg in das Repo; Sicherlich ist jede Dokumentation wie Hilfedateien, die möglicherweise in das Programm integriert sind, vorhanden, und es ist ein nützlicher Ort, um Entwicklerdokumentation zu platzieren.
Wir haben sogar ausführbare Windows-Dateien für unsere Produktionsversionen dort abgelegt, um Menschen, die nach Software suchen, einen einzigen Speicherort zu bieten. Unsere Linux-Versionen werden auf einen Server übertragen und müssen nicht gespeichert werden.
- Wir verlangen nicht, dass das Repository jederzeit in der Lage ist, eine neueste Version bereitzustellen, die erstellt und ausgeführt wird. Einige Projekte funktionieren so, andere nicht. Die Entscheidung liegt beim Projektmanager und hängt von vielen Faktoren ab, aber ich denke, sie bricht zusammen, wenn größere Änderungen an einem Programm vorgenommen werden.
quelle
So oft es geht. Code existiert nur, wenn er unter Quellcodeverwaltung steht :)
Durch häufige Festschreibungen (danach kleinere Änderungssätze) können Sie Ihre Änderungen einfach integrieren und die Wahrscheinlichkeit erhöhen, dass etwas nicht beschädigt wird.
Andere Leute haben angemerkt, dass Sie ein Commit durchführen sollten, wenn Sie über einen funktionierenden Code verfügen. Ich finde es jedoch nützlich, etwas häufiger ein Commit durchzuführen. Einige Male bemerkte ich, dass ich die Quellcodeverwaltung als schnellen Rückgängig- / Wiederherstellungsmechanismus verwende.
Wenn ich in meinem eigenen Zweig arbeite, ziehe ich es vor, so viel wie möglich zu verpflichten (buchstäblich so oft, wie ich Strg + s drücke).
Lesen Sie das SVN-Buch - es ist ein Ort, mit dem Sie beginnen sollten, wenn Sie SVN lernen:
Dokumentation, kleine Binärdateien, die für die Erstellung erforderlich sind, und andere Dinge, die einen gewissen Wert haben, gehen zur Quellcodeverwaltung.
quelle
Im Folgenden finden Sie einige Ressourcen zur Häufigkeit des Festschreibens, zu Festschreibungsnachrichten, zur Projektstruktur, zur Quellcodeverwaltung und zu anderen allgemeinen Richtlinien:
Diese Fragen zum Stapelüberlauf enthalten auch einige nützliche Informationen, die von Interesse sein können:
In Bezug auf die grundlegenden Subversion-Konzepte wie Verzweigung und Tagging denke ich, dass dies im Subversion-Buch sehr gut erklärt wird .
Wie Sie vielleicht feststellen werden, nachdem Sie etwas mehr über das Thema gelesen haben, sind die Meinungen der Menschen zu den besten Praktiken in diesem Bereich oft unterschiedlich und manchmal widersprüchlich. Ich denke, die beste Option für Sie ist, zu lesen, was andere Leute tun, und die Richtlinien und Praktiken auszuwählen, die Ihrer Meinung nach für Sie am sinnvollsten sind.
Ich halte es nicht für eine gute Idee, eine Praxis anzuwenden, wenn Sie den Zweck nicht verstehen oder den dahinter stehenden Gründen nicht zustimmen. Befolgen Sie also keine Ratschläge blind, sondern entscheiden Sie sich selbst, was Ihrer Meinung nach am besten für Sie funktioniert. Das Experimentieren mit verschiedenen Methoden ist auch eine gute Möglichkeit, um zu lernen und herauszufinden, wie Sie am liebsten arbeiten. Ein gutes Beispiel hierfür ist die Strukturierung des Repositorys. Es gibt keinen richtigen oder falschen Weg, und es ist oft schwer zu wissen, welchen Weg Sie bevorzugen, bis Sie sie tatsächlich in der Praxis ausprobiert haben.
quelle
Die Häufigkeit des Festschreibens hängt von Ihrem Projektmanagementstil ab. Viele Leute verzichten darauf, sich zu verpflichten, wenn dadurch der Build (oder die Funktionalität) beschädigt wird.
Zweige können auf zwei Arten verwendet werden, normalerweise: 1) Ein aktiver Zweig für die Entwicklung (und der Trunk bleibt stabil) oder 2) Zweige für alternative Entwicklungspfade.
Tags werden im Allgemeinen zur Identifizierung von Releases verwendet, damit sie nicht im Mix verloren gehen. Die Definition von "Release" liegt bei Ihnen.
quelle
Ich denke, das Hauptproblem ist, dass das mentale Bild der Quellcodeverwaltung verwirrt ist. Wir haben normalerweise Stamm und Zweige, aber dann bekommen wir nicht verwandte Ideen von Tags / Releases oder etwas Ähnlichem.
Wenn Sie die Idee eines Baumes vollständiger verwenden, wird es klarer, zumindest für mich.
Wir bekommen den Stamm -> bildet Zweige -> produzieren Obst (Tags / Releases).
Die Idee ist, dass Sie das Projekt aus einem Stamm erweitern, der dann Zweige erstellt, sobald der Stamm stabil genug ist, um den Zweig zu halten. Wenn der Zweig eine Frucht hervorgebracht hat, pflücken Sie sie vom Zweig und geben sie als Etikett frei.
Tags sind im Wesentlichen Liefergegenstände. Während Stamm und Zweige sie produzieren.
quelle
Wie andere bereits gesagt haben, ist das SVN-Buch der beste Ausgangspunkt und eine gute Referenz, sobald Sie Ihre Seebeine bekommen haben. Nun zu Ihren Fragen ...
Wie oft verpflichten Sie sich? So oft wie man Strg + s drücken würde?
Oft, aber nicht so oft, wie Sie Strg + s drücken. Es ist eine Frage des persönlichen Geschmacks und / oder der Teampolitik. Persönlich würde ich Commit sagen, wenn Sie einen funktionalen Code vervollständigen, egal wie klein er ist.
Was ist ein Zweig und was ist ein Tag und wie steuern Sie sie?
Erstens ist Trunk der Ort, an dem Sie Ihre aktive Entwicklung durchführen. Es ist die Hauptzeile Ihres Codes. Ein Zweig ist eine Abweichung von der Hauptlinie. Dies kann eine große Abweichung sein, wie in einer früheren Version, oder nur eine kleine Änderung, die Sie ausprobieren möchten. Ein Tag ist eine Momentaufnahme Ihres Codes. Auf diese Weise können Sie einer bestimmten Revision ein Etikett oder ein Lesezeichen hinzufügen.
Erwähnenswert ist auch, dass bei Subversion Trunk, Zweige und Tags nur Konventionen sind. Nichts hindert Sie daran, in Tags zu arbeiten oder Zweige zu haben, die Ihre Hauptlinie sind, oder das Tag-Branch-Trunk-Schema insgesamt zu ignorieren. Aber wenn Sie keinen guten Grund haben, halten Sie sich am besten an die Konvention.
Was geht in die SVN? Nur Quellcode oder teilen Sie hier auch andere Dateien?
Auch eine persönliche oder Teamwahl. Ich ziehe es vor, alles, was mit dem Build zu tun hat, in meinem Repository zu behalten. Dazu gehören Konfigurationsdateien, Build-Skripte, zugehörige Mediendateien, Dokumente usw. Sie sollten keine Dateien einchecken, die auf dem Computer jedes Entwicklers unterschiedlich sein müssen. Sie müssen auch keine Nebenprodukte Ihres Codes einchecken. Ich denke hauptsächlich an Build-Ordner, Objektdateien und dergleichen.
quelle
Eric Sink, der im Januar 2009 im SO-Podcast Nr. 36 erschien, schrieb eine hervorragende Artikelserie unter dem Titel Source Control How-to .
(Eric ist der Gründer von SourceGear, der eine Plug-kompatible Version von SourceSafe vermarktet, aber ohne die Schrecklichkeit.)
quelle
Nur um weitere Antworten hinzuzufügen:
quelle
Andere haben angegeben, dass es von Ihrem Stil abhängt.
Die große Frage für Sie ist, wie oft Sie Ihre Software "integrieren". Testgetriebene Entwicklung, Agile und Scrum (und viele, viele andere) basieren auf kleinen Änderungen und kontinuierlicher Integration. Sie predigen, dass kleine Änderungen vorgenommen werden, jeder findet die Pausen und repariert sie ständig.
Bei einem größeren Projekt (denken Sie an Regierung, Verteidigung, 100.000 + LOC) können Sie jedoch keine kontinuierliche Integration verwenden, da dies nicht möglich ist. In diesen Situationen ist es möglicherweise besser, die Verzweigung zu verwenden, um viele kleine Commits durchzuführen, aber NUR das in den Trunk zurückzubringen, was funktioniert und bereit ist, in den Build integriert zu werden.
Eine Einschränkung bei der Verzweigung ist jedoch, dass es ein Albtraum in Ihrem Repository sein kann, Arbeit in den Trunk zu bringen, wenn sie nicht ordnungsgemäß verwaltet werden, da sich jeder an verschiedenen Stellen im Trunk entwickelt (was übrigens eines der größten Argumente dafür ist kontinuierliche Integration).
Es gibt keine endgültige Antwort auf diese Frage. Der beste Weg ist, mit Ihrem Team zusammenzuarbeiten, um die beste Kompromisslösung zu finden.
quelle
Die Versionskontrolle mit Subversion ist der Leitfaden für Anfänger und alte Hasen.
Ich glaube nicht, dass Sie Subversion effektiv nutzen können, ohne zumindest die ersten Kapitel zu lesen.
quelle
Zum Festschreiben verwende ich die folgenden Strategien:
so oft wie möglich begehen.
Jede Funktionsänderung / jeder Bugfix sollte ein eigenes Commit erhalten (nicht viele Dateien gleichzeitig festschreiben, da dadurch der Verlauf dieser Datei unklar wird - z. B. wenn ich ein Protokollierungsmodul und ein GUI-Modul unabhängig voneinander ändere und beide gleichzeitig festschreibe). Beide Änderungen sind in beiden Dateiversionen sichtbar. Dies erschwert das Lesen eines Dateiversionsverlaufs.
Brechen Sie den Build bei keinem Commit ab - es sollte möglich sein, eine beliebige Version des Repositorys abzurufen und zu erstellen.
Alle Dateien, die zum Erstellen und Ausführen der App erforderlich sind, sollten sich in SVN befinden. Testdateien und dergleichen sollten nicht, es sei denn, sie sind Teil der Komponententests.
quelle
Viele gute Kommentare hier, aber etwas, das nicht erwähnt wurde, sind Commit-Nachrichten. Diese sollten obligatorisch und aussagekräftig sein. Besonders beim Verzweigen / Zusammenführen. Auf diese Weise können Sie verfolgen, welche Änderungen für welche Fehlerfunktionen relevant sind.
Zum Beispiel wird svn
commit . -m 'bug #201 fixed y2k bug in code'
jedem, der sich die Geschichte ansieht, sagen, wofür diese Überarbeitung gedacht war.Einige Bug-Tracking-Systeme (z. B. Trac) können im Repository nach diesen Nachrichten suchen und sie den Tickets zuordnen. Das macht es sehr einfach herauszufinden, welche Änderungen mit jedem Ticket verbunden sind.
quelle
Die Richtlinien bei unserer Arbeit lauten wie folgt (Multi-Entwickler-Team, das an einem objektorientierten Framework arbeitet):
Tägliches Update von SVN, um die Änderungen des Vortages zu erhalten
Verpflichten Sie sich täglich. Wenn Sie am nächsten Tag krank sind oder abwesend sind, kann jemand anderes problemlos die Stelle übernehmen, an der Sie aufgehört haben.
Legen Sie keinen Code fest, der irgendetwas kaputt macht, da dies Auswirkungen auf die anderen Entwickler hat.
Arbeiten Sie an kleinen Stücken und verpflichten Sie sich täglich MIT BEDEUTENDEN KOMMENTAREN!
Als Team: Behalten Sie eine Entwicklungsniederlassung bei und verschieben Sie den Pre-Release-Code (für die Qualitätssicherung) in eine Produktionsniederlassung. Dieser Zweig sollte immer nur voll funktionsfähigen Code haben.
quelle
Das TortoiseSVN TSVN-Handbuch basiert auf dem Subversion-Buch , ist jedoch in viel mehr Sprachen verfügbar.
quelle
Ich denke, es gibt zwei Möglichkeiten, Frequenz festzulegen:
Ich bevorzuge das erste - weil die Verwendung des Versionsverwaltungssystems nicht nur für Projekte oder Unternehmen sehr nützlich ist, sondern vor allem für Entwickler. Für mich ist die beste Funktion, den gesamten Code zurückzusetzen, während die am besten zugewiesene Aufgabenimplementierung gesucht wird.
quelle