Warum kann ich nicht schieben einen seichten Klon?
Den git clone --depth
Befehl option sagt
--depth <depth>
Create a shallow clone with a history truncated to the specified number of revisions.
A shallow repository has a number of limitations
(you cannot clone or fetch from it, nor push from nor into it),
but is adequate if you are only interested in the recent history of a large project with a long history,
and would want to send in fixes as patches.
Warum shallow-clones haben diese Einschränkung? Warum ist es patches nur workflow?
Für einige Projekt-workflows, die ich übergeben zu müssen, nur der Letzte commit von einem einzigen Zweig zu einem "coder" und dann haben Sie in der Lage sein, um push
Ihre (fast forward) Entwicklungen an den Haupt-server. Dies ist teilweise für Sicherheit, IP-Schutz-und repo-Größe, und teilweise zur Verringerung der Verwirrung, die ein großes repo bringt, einen naiv-coder. Gibt es ein git-workflow, der dies ermöglicht?
Update: Basierend auf Karl Bielefeldt beantworten Sie die git checkout --orphan
sollte die richtige Antwort. Aber muss man noch die 'Klon' Zweig allein, an den neuen Benutzer, und werden in der Lage, schieben Sie es effektiv.
Mann Seite besagt:
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>] --orphan
Erstellen Sie ein neues orphan-Zweig, benannt
<new_branch>
, angefangen von
<start_point>
und um es zu wechseln. Der erste commit gemacht auf diese neue
der Zweig hat keine Eltern, und es wird die Wurzel einer neuen Geschichte
völlig abgekoppelt von allen anderen Branchen und begeht.Den index und die working-tree angepasst, wenn Sie zuvor
führen Siegit checkout <start_point>
. Dies ermöglicht Ihnen, eine neue zu starten
Historie, eine Reihe von Pfaden, ähnlich<start_point>
durch
einfach laufengit commit -a
um die root-commit.Dies kann nützlich sein, wenn Sie wollen, veröffentlichen Sie den Baum aus einem commit
ohne dass seine vollständige Geschichte. Sie können dies tun wollen, um
veröffentlichen Sie eine open-source-Zweig von einem Projekt, dessen aktuellen Baum ist
"sauber", aber deren vollständige Geschichte enthält urheberrechtlich geschützte oder anderweitig
belastet bits von code.Wenn Sie anfangen wollen, ein getrenntes Historie, die eine Reihe von
Wege, die völlig Verschieden ist von der eines<start_point>
, dann
Sie sollten klar den index und die working-Baum direkt nach Erstellung
die verwaisten Zweig durch ausführengit rm -rf .
von der obersten Ebene des
arbeiten Baum. Danach sind Sie bereit, bereiten Sie Ihre neuen Dateien
repopulating die arbeiten Baum, durch kopieren aus anderswo,
extrahieren von Dateien mit tar, etc.
VonC Links zu den Junio-Kommentare ist interessant. Ich denke das Handbuch sollte die Führung in diesem Fall, und damit der richtige Befehl [z.B. clone <branch> --options
] zu extrahieren, die nur den relevanten Teil des Geschäfts. Offensichtlich ist die Wahrscheinlichkeit push
Erfolg erhöht, indem er ein paar verlinkten verpflichtet und SHA1s am unteren Ende der Geschichte, sperren Sie die repo-matching.
Update Git 1.9.0 release-notes 14 Feb '14.
"Holen aus einem flach-geklonte repository verwendet werden, verboten,
vor allem, weil die codepaths beteiligt waren, nicht sorgfältig geprüft
und wir haben nicht die Mühe, die Unterstützung einer solchen Verwendung. Diese Version versucht
zu ermöglichen-Objekt-transfer aus einem flach-geklonten repository in ein
mehr kontrolliert (d.h. der Empfänger wird eine flache repository
mit einer verkürzten Geschichte)."
Dies ist eine gute Nachricht für die flachen cloners.
Der nächsten Engen Klone evtl.
Die neuen Entwickler sind angefangen als naive Programmierer 😉 Und einige, die Verwirrung wird immer verwendet, um git selbst, das kann eine Herausforderung sein, also fangen wir einfach...
Die Idee mit einer Liste der commits ist wahrscheinlich das grundlegendste Konzept in Git. Wenn ich wurde eingeführt, um mit Git repos, dass immer nur 1 verpflichten, denke ich, wäre ich noch mehr verwirrt.
es war eher, dass zunächst ein neuer Entwickler (oder ein team), die gerade in git, kann nur gestartet werden, mit geringer Tiefe (ein halbes Dutzend verpflichtet?) - im Vergleich zu einigen bestehenden Verfahren, wo alle Sie sehen, ist der Letzte check-in! Wenn das Produkt von Zyklen mult-jährigen, die historischen CM Stil ist slooww, es ist also eine große änderung der Unternehmenskultur.
es scheint, dass man derzeit: check stackoverflow.com/a/21217267/4398050
InformationsquelleAutor Philip Oakley | 2011-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Junio C. Hamano (Haupt-Git-maintainer) bringt es:
Update 2014: siehe "Ist git clone --depth 1 ("shallow clone") mehr als nützlich, macht es aus?": diese Einschränkung wird aufgehoben, mit Git 1.9!
Update 2015: mit Git 2.5+, Sie werden sogar in der Lage zu fetch a single commit. Siehe "Ziehen Sie einen bestimmten commit von einem entfernten git-repository"
Ursprüngliche Antwort (August 2011):
Also es könnte Arbeit in einigen Fällen, aber nicht unterstützt:
Wenn ich habe etwas zu sagen...
Mehr auf die "shallow clone" - update-Prozess finden Sie unter "So aktualisieren Sie ein git-shallow clone"?".
Ta für die nabble-Referenz. Ich kann keinen Zugriff auf das blog von meiner aktuellen firewall, also guck ich später. Ich unserem Fall wissen wir, dass das R-R-R würde sich dem S-S-S, denn wir würden es so eingerichtet. Es ist eine Falle, um herauszufinden, was funktionieren wird, [wenn vorhanden] und seine Voraussetzungen.
Ah, ja die hatte ich gesehen, dass die post, während Sie einige der Forschung. Ist das nicht der Linus Gesetze, die Dateien wachsen, so pack deltas in reverse? Plus, wenn ich das richtig verstanden hab, eine grundlegende
clone --depth 1
sich die Zweige jedes Tiefe ein, anstatt nur einen bestimmten Zweig auf der Tiefe 1. Also das blog-Beispiel ist der pick-up mehr.delta sind für push-oder fetch-Operationen. Sonst ist alles nur komprimiert in der Basis (es sei denn, Sie explizit auslösen der Erstellung von komprimierten Archiven von Objekten). Aber das fehlen der gemeinsamen Geschichte, wenn Sie drücken Sie zurück, um eine "shallow clone" ist wirklich ein Problem.
Es wurde auch ein Kommentar auf [email protected] article.gmane.org/gmane.comp.version-control.git/177617 über das Tiefe problem, das erklärt es ganz gut.
InformationsquelleAutor VonC
Ja, es zu senden-Updates als patches.
git format-patch
ist speziell entwickelt, um dies zu ermöglichen. Es nennt sich eine "gatekeeper" - workflow, wenn Sie wollen google für weitere details. Es ist schwer zu glauben, dass eine Organisation befasst sich mit "Sicherheit und IP-Schutz" wie deins ist es nicht schon etwas ähnliches, wo eine person oder eine kleine Gruppe ist zuständig für die Sicherheitsüberprüfung "nicht vertrauenswürdigen" änderungen, bevor Sie es in die Reale bauen.Basierend auf Ihren Kommentar, ich habe jetzt eine bessere Vorstellung von Ihren Anforderungen. Was ich empfehlen würde, ist die Schaffung einer orphan Zweig (siehe git checkout --orphan), von welchem Punkt Sie wollen, dass Ihr devs, um zu starten. Klon nur, dass die Verzweigung zu einem anderen repository zugänglich zu den devs, und lassen Sie Sie clone, push und pull normal repo.
Dann, wenn Sie wieder eingliedern sollten Ihre änderungen an der offiziellen geschützt repository, ziehen Sie einfach Ihre Filiale, machen Sie eine Kopie mit
git branch
so dass Sie nicht überschreiben Ihre ursprünglichen Waise (falls Sie möchten, wiederholen Sie den Vorgang später), dann Stellungswechsel die Kopie auf Ihr original-Verzweigung und Zusammenführung oder was auch immer als normal. Die Geschichte wird Aussehen, wie Sie arbeitete direkt aus Ihrem geschützten repo.Es ist ein wenig komplizierter als normal, aber das ist der Preis für die zusätzliche Isolierung.
siehe mein edit.
Die
orphan branch
option sieht sicherlich interessant. Ich werde einen guten Blick über Sie, um zu sehen, die pro 's und con' s wrt unserer lokalen organisatorischen Fragen.Ich glaube nicht, können Sie leicht Stellungswechsel änderungen, die sich aus einem verwaisten Zweig in deinem master-branch, da es keine Begehen gemeinsam zu suchen.
Die Probleme mit einem verwaisten Zweig ist, dass es beginnt eine ganz andere commit-Historie, was bedeutet, dass die Zusammenlegung von der einen zur anderen ist nicht möglich.
InformationsquelleAutor Karl Bielefeldt