2013-04-18 2 views
8

Gibt es eine Möglichkeit, ein Commit auf ein Remote-Git-Repo zu übertragen, ohne zuerst einen lokalen Klon dieses Repos zu erstellen?Wie aktualisiert man eine Datei im Remote-Repo, ohne diesen Repo zuerst zu klonen?

Ich habe eine gültige URL für den Remote-Repo, ich kenne den Pfad der Datei, und alles, was ich tun möchte, ist eine aktualisierte Version der Datei auf den Master zu schieben. Im Idealfall möchte ich, dass dies mit jeder gültigen Remote-Repo-URL funktioniert, aber es wäre immer noch hilfreich, wenn es nur mit https-basierten Git-URLs funktioniert.

Ich denke, das ist unmöglich, da es nicht möglich scheint, eine einzige Datei ohne Klonen im allgemeinen Fall, nach der Antwort How to "git show" on a remote repo? abrufen. Aber ich hoffe, es gibt einen Workaround, der einige der niedrigeren git-Befehle verwendet.

+1

Denken Sie nicht, dass es möglich ist, oder es sollte wirklich, warum würden Sie Dateien bearbeiten, ohne das gesamte Repo an erster Stelle? –

+1

Wenn das Remote-Repository auf [github] (http://github.com) gehostet wird, können Sie die Datei direkt dort bearbeiten. Ansonsten glaube ich nicht, dass es möglich ist. –

+1

@MadaraUchiha Warum? Manchmal muss man nur eine kleine Änderung an einem massiven Repo vornehmen, und es kostet viel Zeit, das Ganze zu klonen. In meinem Fall muss eine Management-App Metadaten aktualisieren, die in Hunderten von Git-Repos enthalten sind, möchte aber nicht lokale Kopien von allen nur für diesen Zweck aufbewahren. – algal

Antwort

7

Nicht möglich. Aber da ein potenzielles Commit nur ein einziges Commit als sein Elternteil hätte, ist es möglich, das sogenannte "seichte Klonen" zu verwenden und nur das Tip-Commit des benötigten Zweiges zu holen. Dies bringt nur eine minimale Anzahl von Objekten von der Fernbedienung. Suchen Sie nach der Befehlszeilenoption --depthgit clone.

+0

Interessantes Feature! Die man-Seiten sagen jedoch: _Sie können nicht klonen oder davon abholen, ** noch von oder in ihn schieben ** _.Obwohl Sie damit einen Patch erstellen und den Patch einzeln senden können, hilft Ihnen das nicht, Änderungen automatisch vorzunehmen. – Shahbaz

+0

@Shahbaz Das Handbuch ist eigentlich falsch, Sie können es von ganz gut schieben ... – poke

+0

@poke, ich habe es nicht versucht, aber wenn Sie sicher sind, in Betracht ziehen, einen Fehlerbericht auf der Handbuchseite zu archivieren. – Shahbaz

3

Nein, das ist nicht möglich. Sie müssen das gesamte Repository klonen, damit dies funktioniert. Git muss über alle Dateien und .git wissen, um seine Arbeit richtig zu machen. Aus diesem Grund können Sie nicht beliebige Dateien einfach so verschieben.

1

@algal, für Ihren speziellen Anwendungsfall können Sie möglicherweise in der Lage sein, ein Submodul zu verwenden (http://git-scm.com/docs/git-submodule). Sie könnten klonen und sich an das Submodul binden, ohne das "Supermodul" zu klonen, das den von Ihnen erwähnten "massiven" Code enthalten könnte. Das Supermodul könnte auf das Submodul für die von Ihnen erwähnte Konfigurationsinformation verweisen.

0

Ja, Sie können eine neue Version tagging

folgen mit Push diese Schritte

in Ihrem neuen Projekt-Stamm

  1. git init
  2. git remote add origin [email protected]:yourusername/yourpoject
  3. git tag -a v2.0 -m 'version 2.0'
  4. git add .
  5. git commit -m "New Version 2.0 :rocket:"
  6. git push -u origin v2.0

jetzt haben Sie einen neuen Zweig namens v2.0 mit Ihrem neuen Projekt und Ihr Master-Zweig bleibt unberührt. Danach können Sie Ihren Standardzweig in Ihren github Projekteinstellungen ändern.

Verwandte Themen