У меня есть git-репозиторий, с которым я работаю и который имеет файлы и папки, которые должны быть символическими ссылками на файлы и папки внутри другой папки Все символические ссылки ссылаются как текст во второй папке проектов. Я просто хочу знать, как пройти и автоматически настроить все символические ссылки.

Пример структуры

project1/

---- myfile.rb

---- myfolder/

project2/

---- myfile.rb

---- myfolder


и в файле project2/myfile.rb он содержит только следующий текст в строке 1.

../project1/myfile.rb

и project2/myfolder просто включает в себя текст

../project1/myfolder

Это повторяется по всей файловой структуре. Другой пример будет

project2/app.rb содержит текст

../project2/app.rb

Я нахожусь на Ubuntu и думаю, что есть способ пройти через них в автоматическом режиме и установить символические ссылки, а не вручную находить каждую из них.

2 ответа2

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
0

Запустите следующее из своего каталога project2 :

for file in *; do
    link="$(cat "$file")"
    rm "$file"
    ln -s "$link" "$file"
done

Это не рекурсивно, поэтому оно не рассматривает подкаталоги.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .