Ist es nicht möglich, einen Unterordner in einem Repo auf einem Server zu erstellen?
wenn ich mache:
git push origin dev/master
alles arbeit finden
aber wenn ich es mache
git push origin dev/sub/master
Ich schaff das:
error: 'refs/heads/dev/sub' exists; cannot create 'refs/heads/dev/sub/master'
Ich habe mit "git branch -r" und direkt mit ssh nachgesehen, es ist noch kein dev / sub-Ordner erstellt.
was ist los?
Antworten:
Es ist kein Ordner , der existiert, es ist ein Zweig . (Nun, möglicherweise ist irgendwo ein Ordner / Verzeichnis beteiligt - oder auch nicht, da Referenzen "gepackt" werden und nicht mehr als Dateien in Verzeichnissen vorhanden sind.)
b
vorhanden ist, kann kein Zweig mit dem Namenb/anything
erstellt werden.dev/b
vorhanden ist,dev/b/c
kann diese ebenfalls nicht erstellt werden.Dies ist eine git-interne Einschränkung. In diesem speziellen Fall hat die Fernbedienung
origin
einen Zweig mit dem Namendev/sub
(unabhängig davon, ob Sie ihn haben oder nicht, ist es wichtig, ob die Fernbedienung ihn hat). Um auf zu erstellenorigin
, mit dem Namen ein Zweigdev/sub/master
, müssen Sie zuerst den Zweig löschen Namendev/sub
auforigin
:(Natürlich kann diesen Zweig zu löschen etwas löschen wichtig es über, so sicher sein , wissen Sie , was Sie tun. Im Allgemeinen, könnten Sie wollen
git fetch origin
zuerst, die Erfassung ihrerdev/sub
alsorigin/dev/sub
. Anschließend können Sie eine lokale Niederlassung machen namensdev/renamed-sub
zeigt auf die gleiche begehen ,dev/renamed-sub
auf der Fernbedienung erstellen, die Fernbedienung löschendev/sub
und danndev/sub/master
auf der Fernbedienung erstellen .)Wenn Sie sich auf der Fernbedienung (dem System, auf dem
origin
gehostet wird) anmelden können , können Sie dort in das Repository gehen und einfach den lokalendev/sub
Zweig umbenennen . (Aufgrund der folgenden Kommentare vermute ich, dass es dort auch ein defektes Skript für die automatische Bereitstellung gibt, das wahrscheinlich behoben werden sollte, um nur "bereitstellbare" Zweige bereitzustellen, anstatt alles, was gepusht wird. Aber ich rate hier nur.)quelle
release/1.1
undrelease/1.2
mitrelease/1.1/hofix/prevent-upload-bork
&release/1.1/hotfix/assure-user-of-competence
usw. haben. Und die Fehlermeldung führt hierher (danke), anstatt die Einschränkung anzugeben! Aber danke für die einfache und klare Erklärung.refs/tags/foo
und diesrefs/tags/foo/2
beispielsweise nicht kann, muss es einen eigenen Schlüsselwertspeicher implementieren. Ich denke, Git wird sowieso gezwungen sein, einen eigenen Schlüsselwertspeicher zu implementieren, aber ich weiß nicht, ob sie die Einschränkung dann aufheben werden.git checkout -- master
bedeutet Auschecken die benannte Dateimaster
anstelle des Zweignamens).Ich befand mich in einem Zustand, in dem ich nicht einmal abrufen konnte, weil mein Repo Informationen über nicht vorhandene Remote-Filialen enthielt, die ich nicht einmal ausgecheckt hatte. Ich habe es gelöst, indem ich eine Kombination (danke @torek) von:
git branch -r
lokale Kopien von Remote-Zweigen auflistengit ls-remote
Remote-Zweige auflistengit fetch --prune origin
lokale Kopien von Remote-Zweigen aktualisieren ( das hat mir eigentlich nicht geholfen )git remote prune origin
Informationen über entfernte Remote-Zweige entfernen ( dies tat es )quelle
git remote prune origin
war der einzige Befehl, den ich ausgeführt habe, um diesen Fehlerstatus zu beheben. In der Tat eine irreführende Nachricht - in meinem Fall habe ich versucht, eine "Version / 2.6.0" zu pushen, und ich hatte das gesamte Verzeichnis "refs / remotes / origin / release *" entfernt -, aber git beschwerte sicherror: update_ref failed for ref 'refs/remotes/origin/release/2.6.0': cannot lock ref 'refs/remotes/origin/release/2.6.0': 'refs/remotes/origin/release' exists; cannot create 'refs/remotes/origin/release/2.6.0'
immer wieder, wenn ich Push / Pull / Fetch versuchteFür mich ->
Fehler =
Lösung =
quelle
Die aktuell akzeptierte Antwort hat mir nicht geholfen, da ich keinen Ref auf dem Remote-Repo zum Löschen hatte - es war nur auf meinem lokalen! Wenn Sie sich in dieser Situation befinden, gehen Sie wie folgt vor:
Dies ist das Problem, mit dem ich konfrontiert war:
Ich habe den Vorschlag der akzeptierten Antwort ausprobiert, aber Folgendes erhalten:
Der Schiedsrichter existierte also nicht einmal
origin
- er hing eindeutig nur irgendwo auf meinem lokalen Repo herum. Also rannte ich$ git remote show me
, was produzierte:Was dann die Lösung klar machte:
Damit verschwand das Problem:
quelle
git remote prune origin
behoben haben. Vielen Dank!Versuchen Sie diesen Befehl, um das Problem zu beheben:
um eine Reihe von Verwaltungsaufgaben im aktuellen Repository auszuführen und nicht erreichbare Objekte zu entfernen (durch Aufrufen von
git prune
undgit fsck --unreachable
).Lesen Sie mehr:
git help gc
undgit help prune
quelle
Wenn alles andere fehlschlägt, überprüfen Sie, ob Ihr Repo-System keine Einschränkungen für Filialnamen aufweist. In meinem Fall konnten Sie nur Zweige erstellen, die mit beginnen
SD-<number>
. Jede andere Benennung würde Ihnen nur eine generische geben:quelle
Das obige Skript protokolliert Fehler in XXX-Errors.log und behebt sie, indem eine XXX-exist-tags-delete.sh automatisch aus dem XXX-Errors.log mit den folgenden Befehlen generiert und ausgeführt wird:
quelle
git remote prune origin
Das Problem wurde für mich behobenquelle
Als Windows-Benutzer hat keine der bisherigen Lösungen das Problem für mich gelöst. Der Grund, warum ich diesen Fehler sah, war, dass ich (unter Verwendung der Zweigstellennamen des OP) versuchte, einen Zweig zu erstellen,
dev/sub
aber jemand anderes einen Zweig namens erstellt hatteDev
und wie wir alle wissen, hat Windows ein Dateisystem, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird.Als Windows versuchte
dev/sub
, den Ordner herunterzuziehen , versuchte es zunächst, den Ordner zu erstellendev
, konnte dies jedoch nicht, da erDev
bereits vorhanden war.Die Lösung bestand darin, den
Dev
Zweig lokal und remote mit zu löschengit branch -d Dev && git push origin :Dev
. Agit pull
danach lief gut.Eine weitere Lektion für die Zukunft: Zweignamen sollten immer in Kleinbuchstaben geschrieben werden, um diese Art von Fallstricken zu vermeiden.
quelle
Ich verstehe, dass dies bereits beantwortet wurde, aber es hat bei mir nicht funktioniert. Ich habe mich nicht um lokale Änderungen gekümmert, da diese bereits hochgeschoben wurden, aber Probleme beim Zurückziehen hatten. In meinem Fall haben wir auf halbem Weg zwischen "Hotfix" als Verzweigung und Ordnersystem mit übergeordnetem Ordner als "Hotfix" gewechselt.
- hotfix ---- hotfix / 1234_bug ---- hotfix / 3456_bug
Also bekam ich folgenden Fehler:
Nach der Suche nach ähnlichen Fehlern schließlich fand ich Lösung auf einen Diskussionsthread hier .
quelle
quelle
Umbenennen
dev/sub
indev/sub/something
, dann können Sie einen Zweig erstellendev/sub/master
.quelle