Die Versionskontrolle sollte Code und Konfiguration enthalten, die zum Erstellen der Anwendung erforderlich sind.
Das bedeutet, dass:
Temporäres Material, das für kurze Zeit eingeführt wurde (die Zeit, die erforderlich ist, um den Ort eines Fehlers zu lokalisieren oder mit einer Funktion einer Sprache zu experimentieren), sollte sich nicht in einer Versionskontrolle befinden: Behalten Sie es bei, bis Sie es benötigen es, dann entfernen Sie es einfach, wenn Sie das Commit ausführen .
Lokale Dateien, die für einen bestimmten Computer geeignet sind, können in einem Zweig aufbewahrt werden.
Ich würde es vermeiden, sie nur lokal aufzubewahren, da es zu schmerzhaft ist, all diese Dinge zu wiederholen, wenn Ihr Laptop gestohlen wird oder ein Virus Sie zwingt, das Betriebssystem neu zu installieren (und Sie stellen übrigens fest, dass Ihre letzte Sicherung vor zwei Jahren durchgeführt wurde). .
Auf der anderen Seite sollten Sie mit der Dateistruktur vorsichtig sein: Die lokale Konfiguration ist in Ordnung, bis sie überwältigend wird, und zwingt Sie dazu, in jeder Datei von 42 am Projekt beteiligten Entwicklern eine einzige Änderung vorzunehmen.
Achten Sie auf die Möglichkeit, die Besonderheiten zwischen den Maschinen zu beseitigen. Es kann bedeuten:
Zugriff auf einen Entwickler-SQL-Server gewähren, um lokale Instanzen auf Entwicklermaschinen zu ersetzen,
Paketverteilungsdienste wie Pypi oder npm für öffentliche Pakete und deren private Gegenstücke für interne Pakete verwenden,
Bitten Sie die Mitglieder des Teams, die gleichen Softwareversionen zu installieren.
Machen Sie Software-Updates so transparent wie möglich.
Oder ermöglichen Sie die Bereitstellung des Betriebssystems und der erforderlichen Software auf einem Computer mit einem Klick (plus der Zeit, die jeder Entwickler benötigt, um sein bevorzugtes Vim vs. Emacs, Chrome vs. Firefox usw. zu installieren).
So:
Projektdateien. Möglicherweise müssen Pfade bearbeitet werden, um das Layout auf dem aktuellen PC wiederzugeben.
Warum nicht auf jedem PC das gleiche Layout verwenden? Pfade innerhalb des Projekts sollten relativ zur Projektdatei sein, was bedeutet, dass es egal ist, wo sich das Projekt befindet. Software- und Bibliotheksversionen sind besser gleich, um kryptische Fehler zu vermeiden, die nur auf einigen Computern auftreten und für andere Mitglieder des Teams nicht reproduzierbar sind.
Beispiel:
In einem mit Visual Studio erstellten Projekt finden Sie möglicherweise:
Die Dateien selbst. Da die Pfade relativ sind, spielt es keine Rolle, ob sich das Projekt auf meinem Computer befindet, H:\Development\Hello World Project\
während andere Teammitglieder das Projekt ausgecheckt haben C:\Work\HelloWorld\
.
Die Abhängigkeiten, dh Fremd- und Hausbibliotheken. Beide Arten sollten von NuGet behandelt werden, was alle konfliktbezogenen Diskussionen überflüssig macht. Wenn Sie nicht die gleiche Version der Bibliothek haben, die ich habe, bitten Sie NuGet, die Abhängigkeiten zu aktualisieren. So einfach ist das (wenn es gut funktioniert, was nicht immer der Fall ist).
Beachten Sie, dass es wichtig ist, die internen Bibliotheken auch in einem privaten NuGet zu behalten. Wenn eine Reihe von Bibliotheken in einem freigegebenen Ordner gespeichert oder über ein Team per E-Mail gesendet werden, kommt es zu anarchischen und depressiven CI-Servern.
Einstellungen. Es ist entscheidend, dass das Team die gleichen Einstellungen hat. Wenn die Hälfte des Teams beschließt, Warnungen als Fehler zu behandeln, und die Hälfte des Teams die Warnungen unverändert beibehält, werden die Mitglieder des ersten Teils des Teams die von den Entwicklern generierten Warnungen aus dem zweiten Teil des Teams entfernen.
Die Einstellungen für Dienstprogramme. Diese sind schwierig, da einige Mitglieder des Teams möglicherweise einige Dienstprogramme installiert haben, andere jedoch nicht.
Es wird dringend empfohlen, dasselbe Toolset zu installieren. Wenn einige Programmierer StyleCop verwenden möchten, andere jedoch nicht, wird das Team den Job nicht erledigen. Wenn einige Codeverträge verwenden, andere jedoch nicht, treten dieselben Probleme auf.
Makefiles. Beispielsweise muss die Optimierung möglicherweise während des Debuggens deaktiviert werden, nicht jedoch für den CI-Server.
Behalten Sie mehrere Makefiles in der Versionskontrolle. Es ist nicht ungewöhnlich, eine Debug-Version auch auf dem CI-Server zu erstellen und an einen Client zu senden, bei dem ein heikler Fehler auftritt.
Schmutzige hässliche Hacks. Zum Beispiel 7 in der Mitte einer Funktion zurückgeben, um je nach Funktion etwas zu testen, und den Verdacht haben, bei einem Wert von 7 zu brechen.
Ich würde einen solchen Code an erster Stelle vermeiden. Verwenden Sie Unit-Tests, um etwas zu testen. Wenn es wirklich ein paar Sekunden dauert, um einen Code zum Debuggen auszutauschen , dann tun Sie es, aber Sie werden diesen Code sowieso in ein paar Minuten entfernen, sodass Sie ihn nicht festschreiben müssen.
Wie Sie es beschreiben, sollten Sie einen Test schreiben. Zum Beispiel, wenn Sie sicher sein möchten, dass:
class TemperatureConverter
{
public int CelsiusToFahrenheit(int temperature)
{
...
}
}
Löst eine Ausnahme aus, wenn temperature
sie der AbsoluteZero
Konstanten unterlegen ist, sollten Sie nicht mit Code selbst spielen. Erstellen Sie stattdessen einen Komponententest, der Folgendes bewirkt:
- Dokumentieren Sie Ihren Code selbst,
- Erhöhen Sie die Zuverlässigkeit Ihres Codes,
- sicherstellen, dass sich die Betreuer bei der Änderung der obigen Methode auf Regressionstests verlassen können,
- Wenden Sie sich an andere Entwickler Ihres Teams, die möglicherweise denselben Test durchführen müssen.