Substitua os arquivos referenciados pelo Symlink

0

Eu tenho um repositório git que estou trabalhando com arquivos e pastas que precisam ser link simbólico para arquivos e pastas dentro de outra pasta. Todos os links simbólicos são restringidos como texto na segunda pasta de projetos. Estou apenas querendo saber como passar e ter todos os links simbólicos configurados automaticamente.

Exemplo de estrutura

project1/

---- myfile.rb

---- myfolder/

project2/

---- myfile.rb

---- myfolder

e no arquivo project2 / myfile.rb inclui apenas o seguinte texto na linha 1.

../project1/myfile.rb

e project2 / myfolder incluem apenas o texto

../project1/myfolder

Isso é repetido em toda a estrutura de arquivos. Outro exemplo seria

project2 / app.rb tem o texto

../project2/app.rb

Estou no Ubuntu e acho que há uma maneira de passar por isso de forma automatizada e definir os links simbólicos em vez de encontrar cada um manualmente.

    
por Ross 23.01.2015 / 18:18

2 respostas

1

Não que git possa versionar os links simbólicos, então considere o versionamento dos links simbólicos ao invés de tais arquivos. Além disso, você pode querer considerar os submódulos git para que haja uma relação real entre os dois repositórios.

Se eu tiver sua pergunta / configuração correta, isso pode funcionar. Ele procura por arquivos (recursivamente) na pasta ./project2 com contagem de linhas de um e substitui cada um desses arquivos por um link para o arquivo chamado lá, dado que o destino existe.

#!/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
    
por 23.01.2015 / 19:38
0

Execute o seguinte dentro do diretório project2 :

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

Isto não é recursivo, por isso não olha para os subdiretórios.

    
por 23.01.2015 / 19:36