
У меня есть git-репозиторий, с которым я работаю, в котором есть файлы и папки, которые нужно сделать символическими ссылками на файлы и папки внутри другой папки. Все символические ссылки указаны в виде текста во второй папке проектов. Я просто хочу узнать, как пройти и автоматически настроить все символические ссылки.
Пример структуры
project1/
---- myfile.rb
---- myfolder/
project2/
---- myfile.rb
---- myfolder
и в файлепроект2/мойфайл.rbон включает только следующий текст в строке 1.
../project1/myfile.rb
ипроект2/мояпапкавключает только текст
../project1/myfolder
Это повторяется по всей структуре файла. Другой пример:
проект2/app.rbимеет текст
../project2/app.rb
Я работаю в Ubuntu и думаю, что есть способ пройти по ним автоматически и установить символические ссылки, а не искать каждую из них вручную.
решение1
Не то чтобы git мог версионировать симлинки, поэтому рассмотрите версионирование симлинков, а не таких файлов. Также вы можете рассмотреть подмодули git, чтобы между двумя репозиториями была реальная связь.
Если я правильно понял ваш вопрос/настройку, это может сработать. Он ищет файлы (рекурсивно) в папке ./project2
с количеством строк, равным одной, и заменяет каждый из этих файлов ссылкой на файл, указанный там, при условии, что цель существует.
#!/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
решение2
Запустите следующую команду из вашего project2
каталога:
for file in *; do
link="$(cat "$file")"
rm "$file"
ln -s "$link" "$file"
done
Это не рекурсивно, поэтому подкаталоги не просматриваются.