2012-04-10 5 views
1

Ich habe ein Repository auf GitHub befindet here. Ich habe einen Arbeitszweig für jemanden erstellt und sie haben den Repo gegabelt, einige Änderungen am Arbeitszweig vorgenommen und eine Pull-Anfrage gesendet.Schwerwiegender Fehler nach GitHub automatische Zusammenführung

Ich versuchte die Änderungen und alles war gut und da GitHub anbot, die Pull-Anfrage automatisch zusammenzuführen, ging ich weiter und klickte auf den großen, grünen "Merge Pull Request" -Button. Alles war gut dort, außer dass die Änderungen im Arbeitszweig auf den Meisterzweig angewendet wurden, mit dem ich leben kann.

Das Problem ist jetzt, dass das Repository nicht von mir oder jemand anderem abgerufen werden kann. Ich erhalte diesen Fehler:

[email protected]:/tmp/gh$ git clone git://github.com/dapphp/securimage.git 
Initialized empty Git repository in /tmp/gh/securimage/.git/ 
remote: Counting objects: 333, done. 
remote: Compressing objects: 100% (269/269), done. 
remote: Total 333 (delta 91), reused 297 (delta 55) 
Receiving objects: 100% (333/333), 3.91 MiB | 2.78 MiB/s, done. 
Resolving deltas: 100% (91/91), done. 
error: refs/remotes/origin/master does not point to a valid object! 
error: Trying to write ref refs/heads/master with nonexistant object 31d684d383913c4cf1a0d5ff0691c2c163284a35 
fatal: Cannot update the ref 'HEAD'. 

Dies führt dazu, dass kein Verzeichnis erstellt wird oder keine Arbeitsdateien heruntergeladen werden. Ich habe überall nach möglichen Wegen gesucht, um das Problem zu lösen, aber die meisten reden über das Ausgeben von Befehlen an den Git Repo, was ich nicht tun kann, weil ich keine Kopie des Repos bekommen kann.

Ich habe festgestellt, dass ich immer noch einen entfernten Zweig klonen kann, indem ich so etwas verwende: git clone -b audiofixes git://github.com/dapphp/securimage.git aber ich bekomme immer noch einen Fehler über den schlechten Ref und ich kann keine Befehle finden, die ich ausführen kann, um das Problem zu beheben. Ich bin bereit, die Änderungen bei Bedarf rückgängig zu machen.

Falls es hilft, wenn ich einen anderen Zweig klonen, hier die Ausgabe von git branch -a ist:

* audiofixes 
    remotes/origin/2.0.2 
    remotes/origin/3.0 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/audiofixes 
    remotes/origin/securimage_flash 

An dieser Stelle Ich habe wirklich keine Ahnung, was (wenn überhaupt) Ich kann den Zustand zu beheben tun des Repositories.

Vielen Dank für Anregungen.

EDIT: Einige Befehlsausgabe wie angefordert.

$ ls .git/refs/remotes/origin 
HEAD 

$ ls .git/objects 
info/ pack/ 
# info is empty, pack has pack-b8add06e9a6864ea44a58c06b8bd549eedd90c94.idx and pack-b8add06e9a6864ea44a58c06b8bd549eedd90c94.pack 

$ cat .git/refs/remotes/origin/master 
cat: .git/refs/remotes/origin/master: No such file or directory 

$ cat .git/refs/remotes/origin/HEAD 
ref: refs/remotes/origin/master 
+0

Das klingt nach einem Problem, mit dem du GitHub kontaktieren solltest. – Amber

+0

@Amber Ich habe letzte Nacht eine Support-Anfrage gesendet, noch kein Wort zurück (nicht, dass ich so schnell etwas erwartet hätte), dachte aber, ich würde mein Glück mit Git-Wizards hier versuchen, während ich geduldig warte. – drew010

+0

Ich bin gespannt: Sehen Sie, ob Sie die Ergebnisse von 'ls .git/refs/remotes/origin' und' cat .git/refs/remotes/origin/master' und 'ls .git/objects' –

Antwort

2

NEU:

Offenbar 1) Github nicht ssh-Zugang geben :(und 2) es ist unmöglich reflogs zwischen verschiedenen Maschinen durch git Protokoll zu teilen.

Also ... Sie haben anscheinend bereits ein Ticket erstellt, aber Sie brauchen sie nicht unbedingt, um das Repository zu reparieren. Alles, was Sie brauchen, ist für sie (da sie privilegierten Zugriff haben), git reflog master auf dem Server Repo ausführen und fügen Sie dann die Ergebnisse für Sie anzeigen. Suchen Sie in dieser Datei nach dem vorherigen SHA-1-Wert des Masters (da der aktuelle nicht zu funktionieren scheint). Sobald Sie das haben, können Sie (glaube ich) können die folgenden (auf Ihrem eigenen Computer) tun:

$ git checkout -b temp 
$ git update-ref refs/heads/temp $SHA1 
$ git push -u origin +temp:master 

den Druckvorgang auf dem Server Dies wird rückgängig gemacht werden.

Sie können möglicherweise die zuvor funktionierende SHA1 erhalten, ohne den Reflog vom Server zu bekommen. In Ihrem lokalen Repo (oder dem lokalen Repo Ihres Freundes) existiert das vorhergehende Commit irgendwo dort. Wenn Sie einen Weg finden, es dort zu finden, dann können Sie mit dem obigen Vorschlag fortfahren.

ALT: Hier ist mein erster Gedanke. Wenn Sie das .git/logs -Verzeichnis vom Server kopieren können, werden darin alle vorherigen Werte der master-Verzweigung gespeichert.Insbesondere wird die Datei .git/logs/refs/heads/master eine unverarbeitete Textdatei mit den vorherigen Werten dieser Verzweigung sein. Zum Beispiel (ich weiß nicht, ob Github können Sie dies tun oder nicht):

$ git clone https://github.com/dapphp/securimage.git -b audiofixes 
$ scp github.com:/dapphp/securimage.git/logs/refs/heads/master .git/logs/refs/remotes/origin/master 
$ git update-ref refs/remotes/origin/master refs/remotes/origin/[email protected]{1} #see "Date Spec" section of http://book.git-scm.com/4_git_treeishes.html 

, der sollte theoretisch den Wert ändern, in welchem ​​Master vorher war. Allerdings wird es das nur lokal tun und wird nicht wirklich den Wert auf dem Server ändern, was wir wirklich brauchen. Wenn Sie also direkt auf den Server zugreifen und dort den letzten Befehl ausführen könnten, würde dies das Problem endgültig beheben, indem Sie die Zusammenführung einfach rückgängig machen.

.

Das ist alles, was ich mir über meinen Kopf denken kann. Aber ich mag es wirklich, Git-Puzzles wie dieses zu lösen, also lasse ich es ein bisschen länger in meinem Kopf sitzen :)

+0

Ich schätze den Aufwand, ich bekomme einen Fehler beim Ausführen des Befehls 'scp'. Ich muss im Moment die Arbeit verlassen und werde es wieder versuchen, wenn ich in ein paar Stunden nach Hause komme. Ich bin mir nicht sicher, was passiert, aber vielleicht lässt Github scp nicht zu. 'Ungültiger Befehl: 'scp -f - dapphp/securimage.git'' 'Sie scheinen mit ssh eine git: // URL zu klonen. Der genaue Befehl lautete:' scp [email protected]:/dapphp/securimage.git/logs/refs/köpfe/master .git/logs/refs/remotes/origin/master' (keine '-f' Option, wie Sie sehen können). – drew010

+0

Danke nochmal für die Hilfe, das habe ich nach dem Wochenende irgendwie vergessen. Es war ein Problem mit GH, anscheinend gab es ein kleines Zeitfenster, in dem ein Bug einige Objekte verloren ging. Sie waren in der Lage, den Repo in den Zustand vor dem Commit wiederherzustellen und dann habe ich wieder gepusht und alles war gut. Ich schätze Ihren Beitrag zu dieser Angelegenheit! – drew010