Ich arbeite mit einem Git-Repository, das Dateien und Ordner enthält, die mit Dateien und Ordnern in einem anderen Ordner verknüpft werden müssen. Alle Symlinks werden als Text im zweiten Projektordner referenziert. Ich möchte nur wissen, wie ich alle Symlinks automatisch einrichten kann.
Beispielstruktur
project1/
---- myfile.rb
---- myfolder/
project2/
---- myfile.rb
---- myfolder
und in der Dateiprojekt2/meinedatei.rbEs enthält lediglich den folgenden Text in Zeile 1.
../project1/myfile.rb
UndProjekt2/MeinOrdnerenthält nur den Text
../project1/myfolder
Dies wird in der gesamten Dateistruktur wiederholt. Ein weiteres Beispiel wäre
Projekt2/App.rbhat den Text
../project2/app.rb
Ich verwende Ubuntu und denke, dass es eine Möglichkeit gibt, diese automatisch durchzugehen und die symbolischen Links festzulegen, anstatt jeden einzelnen manuell zu suchen.
Antwort1
Nicht, dass Git symbolische Links versionieren kann. Erwägen Sie daher, die symbolischen Links und nicht solche Dateien zu versionieren. Außerdem sollten Sie Git-Untermodule in Betracht ziehen, damit eine tatsächliche Beziehung zwischen den beiden Repositories besteht.
Wenn ich Ihre Frage/Konfiguration richtig verstanden habe, könnte das funktionieren. Es sucht (rekursiv) nach Dateien in Ordnern ./project2
mit einer Zeilenanzahl von eins und ersetzt jede dieser Dateien durch einen Link zu der dort genannten Datei, vorausgesetzt, das Ziel existiert.
#!/bin/bash
for file in $(find project2/ -type f )
do
linecount=$(wc -l $file | awk '{print $1}')
if [ $linecount -eq 1 ]; then
target=$(cat $file)
relTarget=$(dirname $file)/$target
if [ -f $relTarget ] || [ -d $relTarget ]; then
rm $file
ln -s $target $file
fi
fi
done
Antwort2
Führen Sie Folgendes aus Ihrem project2
Verzeichnis aus:
for file in *; do
link="$(cat "$file")"
rm "$file"
ln -s "$link" "$file"
done
Dies ist nicht rekursiv und durchsucht daher nicht die Unterverzeichnisse.