Wenn ich versuche, einen symbolischen Link aus der Git Bash-Shell zu erstellen, schlägt dies jedes Mal fehl:
$ ln -s /c/Users/bzisad0/Work testlink
ln: creating symbolic link `testlink' to `/c/Users/bzisad0/Work': Permission denied
Abgesehen von der Fehlermeldung wird lediglich ein leeres Verzeichnis mit dem Namen (in diesem Fall) erstellt testlink
.
Ich sehe kein Problem mit der ln
ausführbaren Datei. Zum Beispiel gehört es mir und ist als ausführbar gekennzeichnet:
$ which ln
/bin/ln
$ ls -hal /bin/ln
-rwxr-xr-x 1 BZISAD0 Administ 71k Sep 5 11:55 /bin/ln
Ich besitze auch das aktuelle Verzeichnis ( ~
das ist /c/Users/bzisad0
):
$ ls -dhal .
drwxr-xr-x 115 BZISAD0 Administ 40k Sep 5 12:23 .
Ich habe Administratorrechte und habe versucht, die Git Bash-Shell mit "Als Administrator ausführen" zu öffnen, aber das macht keinen Unterschied.
Ich habe versucht, die Windows-Eigenschaften für zu öffnen ln.exe
und die Berechtigungsstufe auf "Dieses Programm als Administrator ausführen" festzulegen, aber das hilft nicht.
Ich habe in Windows die Eigenschaften Sicherheit -> Erweitert aufgerufen und mich (und nicht die Gruppe Administratoren) zum Eigentümer gemacht, aber das behebt auch nichts.
Ich bin ratlos. Ich weiß nicht, ob diese Fehlermeldung letztendlich von ln
, von Bash oder von Windows stammt oder wie mir möglicherweise die Berechtigung fehlt. Wie kann ich dem auf den Grund gehen?
ln
sind nicht wirklich rückwärts, da sie mehrere Parameter unterstützen. Sie können einfach eine Reihe von Dateien und ein Verzeichnis als Ziel auflisten und es wird funktionieren :) Außerdem ist es in der normalen Reihenfolge ähnlichcp
undmv
weniger verwirrend.ln
.ln
dies nicht tut. Der Punkt bleibt jedoch bestehen.)Für mein Setup führt Git für Windows 2.11.0, das unter Windows 8.1 installiert
export MSYS=winsymlinks:nativestrict
ist, den hier beschriebenen Trick aus: https://github.com/git-for-windows/git/pull/156 Es ist wichtig, die Git Bash-Shell zu starten Als Administrator wie unter Windows konnten nur Administratoren die symbolischen Links erstellen. Also, umtar -xf
Arbeit zu machen und die erforderlichen Symlinks zu erstellen:export MSYS=winsymlinks:nativestrict
quelle
ln -s currentFile newLink
funktioniert auch mit diesem Ansatz (nicht nur Teer). Der erstellte Link wird im Windows-Explorer als Verknüpfung angezeigt. Wenn Sie der Verknüpfung folgen, wird jedoch nicht zum Pfad des anderen Ordners gesprungen, sondern Sie sehen einen Pfad wieC:\currentFolder\newLink
. Ich habe noch nie einen solchen Windows-Link gesehen!Eine Problemumgehung besteht darin,
mklink
von Bash aus zu starten . Auf diese Weise können Sie auch entweder einen Symlink oder eine Junction erstellen .Achten Sie darauf, den
mklink
Befehl als einzelnes Argument ancmd
...Hier sind die Optionen für
mklink
...Wenn Sie stattdessen Links über eine GUI erstellen möchten ... Ich empfehle die Link Shell Extension , ein Windows Explorer-Plugin zum Erstellen symbolischer Links, Hardlinks, Junctions und Volume Mountpoints. Ich benutze es seit Jahren!
Symlinks können lebensrettend sein, wenn Sie ein kleineres SSD-Laufwerk auf Ihrem System C: -Laufwerk haben und einige aufgeblähte Ordner, die nicht auf SSD sein müssen, mit anderen Laufwerken verknüpfen müssen. Ich benutze den kostenlosen WinDirStat , um die Speicherplatzfresser zu finden.
quelle
cmd /c
da/c
es immer ersetzt wirdC:
(das Dateisystem verwendet/c/Windows/...
Konventionen). Zum Glück können Sie tun,echo -n | cmd /k ...
wenn Sie keinK:
Laufwerk haben. Brillant./c
kann auf diese//c
Weise maskiert werden, um den Powershell-Befehl anstelle des Laufwerks C: zu erhalten. Ich wollte auch ein paar Beispiele hinzufügen, wie genau die Syntax aussehen muss, um siemklink
in der Git-Bash-Shell zu verwenden, da ich eine Weile gebraucht habe, um sie herauszufinden. Wie Tony beschreibt,mklink
funktioniert das Zitieren des gesamten m- Befehls wie folgt:cmd //c "mklink .\b_dir\test.txt .\a_dir\test.txt"
Oder Sie können die Anführungszeichen weglassen und den Backslahes folgendermaßen entkommen:cmd //c mklink .\\b_dir\\test.txt .\\a_dir\\test.txt
//c
. Übrigens sind in solchen Fällen einfache Anführungszeichen normalerweise bequemer, da in diesen Zeichenfolgen keine Analyse durchgeführt wird.Ich glaube, dass das
ln
mit msysGit gelieferte einfach versucht, seine Argumente zu kopieren, anstatt mit Links zu fummeln. Dies liegt daran, dass Links nur auf NTFS-Dateisystemen funktionieren und das MSYS-Team ln nicht erneut implementieren wollte.Siehe zum Beispiel http://mingw.5.n7.nabble.com/symbolic-link-to-My-Documents-in-MSYS-td28492.html
quelle
ln file1 file2; ln file1 file3; ln file1 file4
bekam ich eine scheinbar gültige Linkanzahl in der Ausgabe vonls -l
. Beachten Sie jedoch, dass dies fehlschlägt,ln: hard link not allowed for directory.
wenn Sie dies versuchen.ln
.Da dies einer der Top-Links ist, die bei der Suche nach Symlinks in Msys oder Git Bash angezeigt werden, war die Antwort,
set MSYS=winsymlinks:native
beim Aufrufengit-cmd.exe
(ich führe ConEmu aus) hinzuzufügen oder dieselbe Zeile in der zu kommentierenmsys2_shell.bat
quelle
git-cmd.exe
Sie verwenden, wenn dies für Sie funktioniert.MSYS2=winsymlinks:native
,MSYS=winsymlinks:native
undCYGWIN=winsymlinks:native
, und die offizielle Git Windows-Distributionsversion verwendet2.8.3.windows.1
.ln -s
kein Symlink, es wird rekursiv kopiert.Erweitern Sie die Antwort von Camilo Martin, wenn Sie den Parameterschalter / j für Windows 10 verwenden müssen. Andernfalls wird der Anruf nur zurückgegeben. "Sie haben nicht genügend Berechtigungen, um diesen Vorgang auszuführen."
Dies funktioniert für git bash 2.20.1.windows.1 / MINGW64 (Windows 10) ohne Administratorrechte (wenn Sie sowohl / old / path als auch / link / path lesen / schreiben können:
quelle
Ich bevorzuge Powershell gegenüber CMD und dachte, ich würde die Powershell-Version davon teilen.
In meinem Fall besteht es darin, Symlinks zu erstellen, die die Datei ~ /.$ mit der Datei ~ / dotfiles / $ für Dotfile-Konfigurationen verknüpfen. Ich habe dies in ein
.sh
Skript eingefügt und es mit git-bash ausgeführt:quelle
Für alle, die daran interessiert sind, wie dies in Windows 10 Git Bash 2.28.0.0.1 erreicht werden kann, müssen Sie dem
ln -s
Befehl das Präfix "MSYS=..
stattexport MSYS=..
zuerst ausführen" voranstellen , nämlich nur einen Befehl:quelle