2010-06-05 2 views
6

Mit Git oder Mercurial, wie würden Sie wissen, wenn Sie einen Klon oder einen Zug machen, niemand eincheckt Dateien (pushen)? Es kann wichtig sein, dass:Mit Git oder Mercurial, wie würden Sie wissen, wenn Sie einen Klon oder einen Zug machen, niemand eincheckt Dateien (drängen)?

1) Sie wissen nie, dass es in einem inkonsistenten Zustand ist, also versuchen Sie für 2 Stunden, den Code zu debuggen, wenn Ihr Code in einem inkonsistenten Zustand ist.

2) Mit all dem Framework-Code (z. B. Ruby on Rails) - potenziell Hunderte von Dateien - wenn einige Dateien nicht mit dem anderen konsistent sind, können die rake db:migrate oder script/generate controller einige Schäden oder Inkonsistenzen des Codes verursachen Base?

+3

Git und Mercurial ist nicht die einzige VCS, die von Inkonsistenz leiden. Ich kann kaputten Code in meinem Subversion-Repository überprüfen und lasse Ihnen 2 Stunden lang Debugging-Code. Kommunikation ist der Schlüssel! – basszero

+3

Kommunikation * ist * Schlüssel. Aus diesem Grund ist die Quellcodeverwaltung nur ein Aspekt der Softwareentwicklung. –

Antwort

16

Pulls und Pushs sind in Git und Mercurial atomar. Es bedeutet, dass sie niemals einen teilweise gedrückten Änderungssatz erhalten. Sie erhalten immer einen ganzen Änderungssatz.

Update: Ich dachte nur, Sie könnten Angst haben "Was ist, wenn jemand eine Reihe von Changesets drängt, und ich werde einige von ihnen bekommen". Dann geht es um die Kommunikation und den Workflow, die im Projekt akzeptiert werden.

Es wird oft vereinbart, dass jeder Commit zu der Amtsleitung (Master oder wie Sie es nennen) den Code in konsistentem Zustand verlassen sollte. Wenn jemand weiß, dass er Änderungen vornehmen wird, die vorübergehende Inkonsistenzen verursachen, sollte er dies in einer Verzweigung tun und wenn es bereit ist, es mit der Verbindungsleitung verbinden. Dann wird der Stamm in einem Commit in den Zweigstatus gebracht, so dass Sie ihn immer konsistent sehen.

Update 2: Wie Tonfa im Kommentar gesagt - in Mercurial Push ist atomar. Ich habe einen einfachen Test in Git gemacht, und auch hier sind Pushs atomar. Sie müssen also solche Inkonsistenzen nicht fürchten, wenn Sie wissen, dass andere Entwickler die Arbeit an Changesets vorantreiben. (Obwohl frühere Aussagen über Zweige noch gültig sind).

+4

Ich weiß nicht für git, aber in hg, wenn jemand mehrere csets drückt, erscheinen sie nur, wenn der Push beendet ist, atomar (meine Vermutung wäre, dass git das gleiche tut, den Zeiger an den Anfang des Zweigs nur bei ändern das Ende), – tonfa

+0

Ah, ja, Sie haben wahrscheinlich Recht. – silk

1

Als ich ein pull in hg tun, wenn es keine Änderungen gibt, erhalte ich ein:

pulling from <REPOSITORY NAME> 
searching for changes 
no changes found 

So weiß, ich habe es seit dem letzten Mal alle Änderungen nicht, die ich gezogen. Außerdem können Sie den Repository-Verlauf durchsuchen und sehen, welche Änderungen vorgenommen wurden.

2

Wie andere schon gesagt haben, sind die Commits atomar, so dass Sie aufgrund eines partiellen Commits kein Problem mit einer Inkonsistenz haben.

Diese Antwort fügt der Konversation hinzu, dass Sie die Möglichkeit haben, Pre-Commit-Hooks hinzuzufügen, die eine saubere Ausführung der Testsuite erzwingen, bevor das Commit zulässig ist.

http://git-scm.com/docs/githooks

https://www.mercurial-scm.org/wiki/Hook

Verwandte Themen