2017-09-08 6 views
1

Ich habe eine Menge Fragen/Antworten über das Klonen eines Repository und das Auschecken einer bestimmten Commit-ID sofort gefunden. Trivialer Ansatz:Git: Clone spezifische Commit-ID auf einem flachen Klon

git clone <URL> working-copy 
cd working-copy; git checkout <COMMIT-ID> 

Mit Niederlassungen können Sie einfach git clone -b <BRANCH> <URL>

Mit Filialen Sie auch ein flaches-Klon machen können, die viel schneller Klonen macht aber dann kann man nicht eine beliebige ID mehr Kasse.

Meine Frage ist also: Gibt es eine Möglichkeit, einen flachen Klon einer bestimmten URL/Commit-ID zu erstellen, ohne einen Zweig auf der Fernbedienung erstellen zu müssen?

Gibt es Unterschiede für verschiedene Arten von Remote-Repositories? (z. B. lokales Dateisystem, BitBucket, GitHub, GitLab usw.)

+0

Dies fällt fest in das "es hängt" Lager, führen Sie Ihren eigenen Server? Oder verwenden Sie einen Dienst wie GitHub oder BitBucket? – LightBender

+0

Nein. Sie müssen entweder eine Verzweigung oder ein Tag für dieses Commit im Remote-Repository erstellen. Siehe https://stackoverflow.com/questions/26135216/why-isnt-there-a-git-clone-specific-commit-option. – ElpieKay

+0

@LightBender: In meinem Fall bin ich interessiert an lokalen Repositories und BitBucket (via http/ssh) – frans

Antwort

2

Wenn Sie keine Kontrolle über den Server haben, gibt es für Sie keine Möglichkeit, dies zu tun. Es gibt eine Sicherheitseinstellung, die Sie auf einem privaten Server deaktivieren können, damit dies funktioniert, aber dies ist nicht empfohlen.

Da flache Klone unvollständig sind, sind viele Funktionen in einem seichten Repo nicht verfügbar (oder werden zumindest nicht ganz richtig funktionieren). Normalerweise wird diese Technik für die Deployment-Verarbeitung verwendet, bei der das Repo sehr kurzlebig ist.

All dies gesagt, in den meisten Situationen, in denen Sie eine einzelne Commit flach Klonen möchten, könnte ein Tag sein, was Sie suchen. git clone -b akzeptiert auch ein Tag, und da sie unveränderlich sind, werden sie immer zu demselben Commit aufgelöst.

Die meisten CI-Systeme, an denen ich in den letzten Jahren gearbeitet habe, verwenden Zweige für transiente Umgebungen und Tags nur für permanente. Dieses System hat bei mir gut funktioniert, ist aber nur eine von mehreren soliden Optionen.

+0

Ich habe gerade gefunden https://Stackoverflow.com/a/43136160/1668622 - erfordert dieser Ansatz die Änderung der Sicherheitseinstellung, die Sie erwähnten ? Und über welche Einstellung sprichst du genau? – frans

+0

@frans Das ist die Änderung der Einstellung, die ich erwähnt habe. :) Siehe [die Git-Dokumentation] (https://github.com/git/git/blob/565301e41670825ceedf75220f2918ae76831240/Documentation/git-upload-archive.txt#L23-L53) für eine detaillierte Erklärung. – LightBender