git: fatal: 'z:\git_root\myproject' does not appear to be a git repository
-
Hallo zusammen,
habe hier ein seltsames Problem. Ich habe eine Windows-Netzwerkfreigabe auf Z:\ gemounted und darin liegen einige git-Repositories. Für die einfache Bedienung benutze ich Tortoise Git und mache fast alles aus dem Kontextmenü des Windows Explorers. Klappt auch alles wunderbar, nur habe ich mir jetzt überlegt, ein kleines Tool zu bauen, und darüber commits und pushes zu machen. Hat den Vorteil, dass die Release Info und Tags halbautomatisch erzeugt werden können (bestimmt das Tool für mich). Der commit in´s lokale Repository klappt (e:\tmp\myproject), der push in das remote Repository allerdings nicht. git quittiert das mit der Fehlermeldung 'fatal: z:\git_root\myproject' does not appear to be a git repository.
Kommandozeile für CreateProcess-Aufruf (commit) und Ausgabe:
"c:\programme\git\bin\git.exe" -C "e:\tmp\myproject" commit --all --signoff --untracked-files=no --status --quiet --message="..." Ausgabe: On branch master Your branch is up-to-date with 'origin/master'. nothing to commit
Kommandozeile für CreateProcess-Aufruf (push) und Ausgabe:
"c:\programme\git\bin\git.exe" -C "e:\tmp\myproject" push origin master Ausgabe: fatal: 'Z:\git_root\myproject' does not appear to be a git repository fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Kommandozeile für CreateProcess-Aufruf (remote) und Ausgabe:
"c:\programme\git\bin\git.exe" -C "e:\tmp\myproject" remote -v Ausgabe: origin Z:\git_root\myproject(fetch) origin Z:\git_root\myproject(push)
Wenn ich die Kommandozeile aus dem CreateProcess-Aufruf in der Kommandozeile einer DOS-Box ausführe klappt auch der push. Bin grad etwas ratlos. Installiert ist git V2.18.0.windows.1 und die config Dateien der Repositories sehen so aus:
Inhalt der lokalen config Datei (e:\tmp\myproject\.git\config):
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true hideDotFiles = dotGitOnly [remote "origin"] url = Z:\\git_root\\myproject fetch = +refs/heads/*:refs/remotes/origin/* puttykeyfile = "" [branch "master"] remote = origin merge = refs/heads/master
Inhalt der origin config Datei (z:\git_root\myproject\config):
[core] bare = true repositoryformatversion = 0 filemode = false symlinks = false ignorecase = true
Hat da jemand ´ne Idee?
-
Naja, ist
z:\git_root\myproject
denn ein Git Repo? Also stimmt der Pfad und das alles? Passen die Berechtigungen für den User mit dem du das probierst?
-
Wow, Hustbär, danke für den Hinweis. Es lag tatsächlich am Benutzer, wobei ich mir das jetzt wieder nicht erklären kann.
Die IDE läuft als elevated process unter meinem Benutzerkonto und startet das git-Tool, das damit dann auch als elevated Prozess läuft. Hab das gerade mal mit zwei DOS-Boxen ausprobiert:- normale DOS-Box: Laufwerk Z:\ ist gemounted und der Zugriff auf´s Repo klappt, Benutzerkonto ist mein Windows-Benutzer
- DOS-Box als Administrator: Laufwerk Z:\ ist nicht gemounted, Benutzerkonto ist mein Windows-Benutzer
Im Task Manager wird für beide cmd.exe mein Benutzerkonto als Besitzer angezeigt. Ich benutze den Process Hacker und der zeigt mir für beide Prozesse den gleichen Benutzernamen und SID an. Nur dass der ein Prozess elevated ist und kein Z:\ hat und der andere ist nicht-elevated und hat ein Laufwerk Z:\.
Mal sehen, vielleicht finde ich was dazu im Netz.Edit:
Microsoftt Artikel dazu
-
OK. Workaround ist aber einfach: UNC Pfade für die Remotes verwenden. (Und für alles andere was das Zeug was in dem Skript läuft auf dem Z Laufwerk braucht.)
Oder, Alternativ: Mach ne Junction bzw. nen Symlink auf das Netzlaufwerk. Siehe https://superuser.com/questions/244562/how-do-i-mount-a-network-drive-to-a-folder
Die Junction/den Symlink gibt's dann auch unabhängig von Benutzerkonto/Session.
-
Hab das jetzt über den EnableLinkedConnections Eintrag in der Registry gemacht.
Nochmal Danke für den Hinweise mit mklink, das ist sicher noch mal nützlich.