Frage

Für eineinhalb Jahren habe ich in der Hoffnung, meine Augen auf dem git Community worden halten Sie den Schalter zur Herstellung von SVN entfernt. Ein besonderes Problem hält mich zurück ist die Unfähigkeit, binäre Dateien zu sperren. Im Laufe des vergangenen Jahres habe ich noch Entwicklungen zu diesem Thema zu sehen. Ich verstehe, dass Dateien geht gegen die grundlegenden Prinzipien der verteilten Quellensteuerung sperren, aber ich sehe nicht, wie eine Web-Entwicklung Vorteil git nehmen können Quellcode und Bilddateiänderungen zu verfolgen, wenn es das Potenzial für binäre Dateikonflikte ist.

Um die Auswirkungen der Verriegelung zu erreichen, ein „zentraler“ Repository muss identifiziert werden. Unabhängig von der verteilten Natur von git, werden die meisten Unternehmen haben eine „zentrale“ Repository für ein Software-Projekt. Wir sollten eine Datei als erforderlich eine Sperre aus der regierenden git-Repository an einer bestimmten Adresse markieren können. Vielleicht ist dies schwierig gemacht, weil git Track Inhalte keine Dateien Datei?

Hat jemand von euch Erfahrung mit Git und Binärdateien im Umgang, die vor der Änderung gesperrt werden sollten?

Hinweis: Es sieht aus wie Quelle Gear neues Open-Source-verteiltes Versionskontrollprojekt, Wahrheits hat als eines ihrer Ziele Sperren

.
War es hilfreich?

Lösung

Git LFS 2.0 hat die Unterstützung für Datei hinzugefügt Verriegelung.

  

Mit Git LFS 2.0.0 Sie jetzt Dateien sperren, die Sie arbeiten aktiv an sind, andere von Drücken auf die Git LFS-Server zu verhindern, bis Sie die Dateien wieder zu entsperren.

     

Dies verhindert, dass auf nicht-zusammenführbar Dateien auf Dateisystemebene Konflikte sowie verlorene Arbeit verschmelzen. Während es die verteilte und parallele Art von Git zu widersprechen scheint, ist das Sperren von Dateien ein wichtiger Bestandteil vieler Softwareentwicklung Workflows-vor allem für größere Teams mit binären Assets arbeiten.

Andere Tipps

Subversion hat Schlösser, und sie sind nicht nur beratend. Sie können mit dem svn:needs-lock Attribute erzwungen werden (aber auch bewusst gebrochen werden kann, falls erforderlich). Es ist die richtige Lösung nicht-zusammenführbar Dateien zu verwalten. Die Firma, die ich für Läden arbeiten so ziemlich alles in Subversion und verwendet svn:needs-lock für alle nicht zusammenführbar Dateien.

Ich bin nicht einverstanden mit „Sperren nur ein Kommunikationsverfahren sind“. Sie sind eine viel effektivere Methode als Push-Benachrichtigungen wie Telefon oder E-Mail. Subversion Schlösser sind selbsterklärend (wer das Schloss hat). Auf der anderen Seite, wenn Sie von anderen traditionellen Push-Benachrichtigungskanälen wie E-Mail kommunizieren, die nicht senden Sie die Mitteilung an? Sie wissen nicht im Voraus, wer die Datei bearbeiten möchte vielleicht, vor allem auf Open-Source-Projekten, wenn Sie eine vollständige Liste Ihres gesamten Entwicklungsteam haben. Das heißt, diese traditionellen Kommunikationsmethoden sind nicht annähernd so effektiv.

Ein zentraler Sperrserver, während sie gegen die Grundsätze der DVCS, ist die einzig gangbare Methode für nicht-zusammenführbar Dateien. Solange DVCS keine zentrale Sperrfunktion haben, denke ich, es wird das Unternehmen halte ich für die Verwendung von Subversion arbeiten.

Die bessere Lösung wäre, ein Merge-Tool für alle Ihre Binärdateiformate zu machen, aber das ist eine längerfristige und kontinuierliche Ziel, das nie „fertig“ werden.

Hier ist eine interessante Lektüre zum Thema.

Ich bin damit einverstanden, dass binäre Dateien Sperren ein notwendiges Merkmal für einige Umgebungen ist. Ich hatte nur einen Gedanken darüber, wie dies zu implementieren, aber:

  • Haben Sie einen Weg, um eine Datei als "needs-lock" die Markierung (wie die "svn: needs-lock" Eigenschaft).
  • Auf der Kasse, git würde markieren eine solche Datei als schreibgeschützt.
  • Ein neuer Befehl git-lock irgendwo einen zentralen Sperrserver laufen würde kontaktieren Erlaubnis zu bitten, sperren.
  • Wenn der Sperrserver die Erlaubnis erteilt, markieren Sie die Datei read-write.
  • git-add würde die Sperrserver des Inhalts-Hash der gesperrten Datei informieren.
  • Der Sperrserver würde achten Sie auf, dass der Inhalt Hash eine Festschreibung in auf dem Master-Repository erscheinen.
  • Wenn die Hash erscheint, lassen Sie die Sperre.

Das ist sehr viel eine unausgegorene Idee und es gibt überall mögliche Löcher. Es geht auch gegen den Geist des git, aber es kann sicherlich in manchen Kontexten nützlich sein.

Innerhalb einer bestimmten Organisation, diese Art der Sache vielleicht gebaut werden, um eine geeignete Kombination von Skript-Wrapper mit und verpflichten Haken.

Als Reaktion auf Marios weitere Sorge mit Änderungen an mehreren Stellen auf den Binärdateien passieren. So das Szenario ist Alice und Bob sind beide Änderungen an der gleichen binären Ressource zur gleichen Zeit. Sie haben jeweils ihre eigene lokale Repo, geklont von einer zentralen Fernbedienung.

Dies ist in der Tat ein potenzielles Problem. So Alice zuerst fertig ist und drückt auf den zentralen alice/update Zweig. Normalerweise, wenn dies geschieht, Alice würde eine Ankündigung machen, dass es überprüft werden soll. Bob sieht, dass und überprüft sie. Er kann entweder (1) übernehmen diese Änderungen sich in seine Version (Verzweigung von alice/update und macht seine Änderungen an, dass) oder (2) seine eigenen Änderungen veröffentlichen bob/update. Auch er macht eine Ansage.

Nun, wenn Alice stattdessen master schiebt, hat Bob ein Dilemma, wenn er master zieht und versucht, in seine lokale Niederlassung zu verschmelzen. Seine Konflikte mit Alice. Aber auch hier kann das gleiche Verfahren anwenden, nur auf verschiedenen Zweigen. Und selbst wenn Bob alle Warnungen ignoriert und verpflichtet über Alice, ist es immer möglich, ziehen Sie Alices begehen Dinge zu beheben. Dies wird einfach ein Kommunikationsproblem.

Da (AFAIK) die Subversion Schlösser nur beratende sind, eine E-Mail oder Instant Message könnte den gleichen Zweck dienen. Aber auch wenn Sie das nicht tun, Git können Sie es zu beheben.

Nein, es gibt keinen Verriegelungsmechanismus per se. Aber ein Verriegelungsmechanismus neigt dazu, nur ein Ersatz für eine gute Kommunikation zu sein. Ich glaube, das ist, warum die Git-Entwickler haben nicht einen Verriegelungsmechanismus hinzugefügt.

Wir haben gerade vor kurzem begonnen, mit Git (verwendet Subversion zuvor), und ich habe eine Änderung Workflow gefunden, die mit Ihrem Problem helfen könnten, ohne die Notwendigkeit für Schlösser. Es nutzt wie git ist so konzipiert, und wie leicht Zweige sind.

Im Grunde läuft es auf einen Nicht-Master-Zweig nach unten drücken, eine Überprüfung dieses Zweiges tun, und dann in den Hauptzweig Verschmelzung (oder je nachdem, was die Zielbranchen sind).

Die Art und Weise git wird „sollte“ verwendet werden soll, veröffentlicht jeder Entwickler ihre eigene öffentliche Repository, das sie andere fordern ziehen aus. Ich habe festgestellt, dass Subversion-Benutzer haben Probleme damit. Anstatt also schieben wir Zweig Bäume im zentralen Repository, wobei jeder Benutzer seinen eigenen Zweig haben. Zum Beispiel könnte eine Hierarchie wie folgt arbeiten:

users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey

Fühlen Sie sich frei, Ihre eigene Struktur zu verwenden. Hinweis: Ich bin auch Thema Zweige zeigt, eine weitere gemeinsame git Idiom.

Dann in einem lokalen Repo für den Benutzer ein:

feature1
feature2

Und um die zentralen Server zu erhalten (Ursprung):

git push origin feature1:users/a/feature1

(dies kann wohl mit Konfigurationsänderungen vereinfacht werden)

Wie auch immer, einmal Feature1 prüfte, wer verantwortlich ist (in unserem Fall ist es der Entwickler der Funktion ist, können Sie einen einzelnen Benutzer verantwortlich für Verschmelzungen zu meistern haben könnten), geschieht Folgendes:

git checkout master
git pull
git merge users/name/feature1
git push

Der Zug hat eine holen (Ziehen alle neuen Master wechselt und die Funktion Zweig) und die Updates Master zu dem, was das zentrale Repository hat. Wenn der Benutzer eine ihre Arbeit geleistet haben und verfolgt Master richtig, sollte es keine Probleme mit der Zusammenführung sein.

All dies bedeutet, dass, selbst wenn ein Benutzer oder Remote-Team eine Änderung an einer binären Ressource macht, es überprüft wird, bevor es in den Hauptzweig aufgenommen wird. Und es gibt eine klare Abgrenzung (basierend auf Prozess), wann etwas geht in den Master-Zweig.

Sie können auch programmatisch erzwingen Aspekte dieser mit git Haken, aber auch hier habe ich nicht mit diesen noch gearbeitet, so kann auf sie nicht sprechen.

Als ich Subversion wurde mit, ich die svn:needs-lock Eigenschaft auf alle binären religiös eingestellt und auch die schwer zu bearbeiten Textdateien. I nie eigentlich keine Konflikte erlebt haben.

Nun, in Git, ich mach dir keine Sorgen über solche Dinge. Denken Sie daran: Schlösser in Subversion sind nicht wirklich zwingend Schlösser, sie sind nur Kommunikationsmittel. Und raten Sie mal etwas. Ich weiß nicht Subversion benötigen, zu kommunizieren, ich mit E-Mail einfach gut verwalten kann, Telefon und Instant Messaging

Eine andere Sache, die ich habe, ist viele Binärformaten mit Klartextformate zu ersetzen. Ich benutze reStructuredText oder LaΤ Ε Χ anstelle von Word, CSV statt Excel, ASCII-Art anstelle von Visio, YAML anstelle von Datenbanken, SVG statt OO Draw, abc statt MIDI, und so weiter.

Es lohnt aktuelle Workflow Prüfung zu sehen, ob Bilder Verriegelung wirklich notwendig ist. Es ist relativ ungewöhnlich für zwei Personen unabhängig voneinander ein Bild zu bearbeiten, und ein bisschen Kommunikation kann einen langen Weg gehen.

ich besprochen habe dieses Problem auf git Diskussionsgruppen und habe festgestellt, dass zu diesem Zeitpunkt gibt es nicht vereinbarte Methode der zentralen Datei für git sperren.

TortoiseGit unterstützt die vollständige git Workflow für Office-Dokumente zu delegieren diff auf Office selbst. Es funktioniert auch für Opendocument-Formate Openoffice zu delegieren.

Ich würde nicht zur Dateisperrung erwartet immer es als Feature in git zu machen. Welche Art von Binär-Dateien sind Sie in erster Linie interessiert? Sind Sie wirklich daran interessiert, die das Sperren von Dateien, oder einfach nur in der Lage, verursachten Konflikte zu verhindern, indem sie nicht zu fusionieren.

ich mich zu erinnern, jemand zu sprechen (oder sogar Implementierung) Unterstützung für die Zusammenführung von Openoffice-Dokumenten in git.

Was ist CAD-Dateien? Wenn die Dateien nicht gesperrt sind, werden schreibgeschützt aufbewahrt und würden die meisten CAD-Programme sie nur öffnen eine Änderung beliebige Bits, als eine neue Datei mit allen VCS gesehen. Also meiner Meinung nach Verriegelung ist ein ideales Mittel für die Kommunikation Ihrer beabsichtigen einige particalur Datei zu ändern. Wie gut, verhindert es einige Software Schreibzugriff auf dem ersten Platz zu gewinnen. Auf diese Weise können Aktualisierungen der lokalen Dateien, ohne die Notwendigkeit, die Software oder zumindest alle Dateien vollständig zu schließen.

Sie einfach eine Textdatei in cc setzen mit der Datei, die Sie sperren möchten, und haben dann das Update Haken ablehnen.

Es könnte wahr sein, dass ein Projekt Reorganisation Schleusen helfen kann vermieden werden, aber:

  • Teams werden auch von anderen Prioritäten (Lage, Kunden, ...) organisiert
  • Werkzeuge werden auch von anderen Zielen (Kompatibilität, Preis, einfache Bedienung durch die meisten der Mitarbeiter)
  • ausgewählt
  • Einige Werkzeuge (und daher gibt binäre Dateien) können nicht vermieden werden, da gibt es einfach keinen Ersatz, der die gleiche Arbeit tun kann, passend, das gleiche zu den Firmen muss für den gleichen Preis.

So fordern, dass ein ganzes Unternehmen ihren Workflow neu zu organisieren könnten und ersetzen alle ihre Werkzeuge, die Binärdateien produzieren, nur in der Lage sein, mit git zu arbeiten, weil der Mangel an Schleusen, klingt ziemlich ineffizient.

Schlösser passen nicht in die git Philosophie (die nie für Binärdateien gemacht wurde), aber es gibt nicht-vernachlässigbaren Situationen, wo Schlösser der effizienteste Weg sind, ein solches Problem zu lösen.

Dies ist keine Lösung, sondern ein Kommentar darüber, warum Verriegelungsmechanismen erforderlich sind. Es gibt einige Werkzeuge in einigen Bereichen verwendet, die binären nur Formate, die flach heraus Mission kritisch sind und die „verwenden, besser / verschiedenen Werkzeuge“ ist nicht nur eine Option. Es gibt keine praktikablen alternativen Tools. Die, die ich mit wirklich vertraut bin nicht Kandidaten für die Zusammenführung, auch wenn Sie die gleichen Informationen in einem ASCII-Format gespeichert. Ein Einwand ich gehört habe, ist, dass Sie in der Lage sein wollen, offline zu arbeiten. Das spezielle Werkzeug Ich denke wirklich nicht offline sowieso arbeiten, weil benötigen, um Lizenzen zu ziehen, so, wenn ich Daten auf einem Laptop habe, ist es nicht, wie kann ich sowieso das Werkzeug, während auf einem Zug laufen. Das heißt, was git sich zieht, wenn ich eine langsame Verbindung haben, kann ich Lizenzen bekommen und auch Änderungen nach unten ziehen, haben aber die schnelle lokale Kopie für in verschiedenen Versionen suchen. Das ist eine schöne Sache, dass die DVCS gibt Ihnen auch in diesem Fall.

Eine Ansicht ist, dass git ist einfach nicht das Werkzeug zu benutzen, aber es ist schön für alle Textdateien, die auch mit ihm verwaltet werden, und es ist ärgerlich, verschiedene Versionskontrolle Tools für verschiedene Dateien benötigen.

Der Art-of-Beratungssichernde-via-Mail-Ansatz stinkt wirklich. Ich habe das gesehen und müde von einem endlosen Strom von E-Mail von gewesen „Ich bin die Bearbeitung“ „Ich bin fertig Bearbeitung“ und gesehen, weil es verloren Änderungen. Der besondere Fall ich denke an war einer, wo eine Sammlung von kleineren ascii Dateien gewesen wäre viel schöner, aber das ist eine Seite.

Im darauf hindeutet, nicht git in meinem Unternehmen für das gleiche Problem zu verwenden. Wir verwenden EA für alle unsere Entwürfe und Microsoft Word für die Dokumentation, wir wissen nicht im Voraus, die eine bestimmte Datei bearbeiten kann so exklusive Verriegelung unsere einzige Option ist.

git funktioniert sehr gut in einem nicht-Team Umfeld, in dem jeder Entwickler nur für ein Stück Code oder Datei verantwortlich ist, weil in diesem Fall die Kommunikation über Sperren ist nicht erforderlich.

Wenn Ihre Organisation Teamumgebung erfordert (in der Regel Entwickler von Arbeitsplatzsicherheit strippen), dann svn, git ist nicht für Sie. Svn bietet sowohl -. Quellcodeverwaltung und die Kommunikation zwischen den Entwicklern über Sperren

Git stellt keine Befehlsdateien zu sperren, aber ich habe einen Weg zu finanzieren, dass die Funktion mit git Haken zu erreichen. Ein Hilfs-Server benötigt wird, um die Sperrinformationen zu speichern. Wir können ein pre-commit Haken, um zu überprüfen, ob einer der engagierten Dateien gesperrt ist. Und wenn jemand eine Datei sperrt, soll ein Programm an, den Hilfs-Server die Informationen des Schrankes und die gesperrte Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top