Comment puis-je créer des fichiers de validation git dans un dossier avec lien symbolique

19

J'ai deux dossiers:

  • /home/me/code/project/
  • /srv/www/projectfiles/

Dans le /home/me/code/projectdossier, j'ai un lien symbolique staticvers/srv/www/projectfiles/

c'est à dire /home/me/code/project/static/->/srv/www/projectfiles/

Lorsque j'essaie de valider maintenant, il ne voit aucun des fichiers derrière le lien symbolique et essaie plutôt de valider le lien symbolique lui-même en tant que fichier.

Comment valider un fichier (par exemple /srv/www/projectfiles/style.css) qui se trouve derrière le lien symbolique?

Macha
la source

Réponses:

12

Une solution de contournement consisterait à avoir / srv / www / projectfiles comme lien symbolique vers / home / me / code / project / static afin que git ne voit aucun lien symbolique

user151019
la source
Donc, vous inversez fondamentalement la logique? Conserver les fichiers / dossiers requis dans le dossier Git, puis placer un lien symbolique ailleurs (où résidaient les fichiers / dossiers d'origine)?
RusI
@Rusl Oui exactement ça
user151019
Mais comment puis-je faire la personnalisation locale des fichiers? Je devrais avoir un dépôt séparé pour chaque machine? Perd le point entier.
Ashnur
Eh bien, la personnalisation locale ne sera pas dans git
user151019
3

Si vous utilisez Linux, j'aime particulièrement la solution fournie par GitBLSR . Il s'agit d'une bibliothèque chargée via LD_PRELOAD qui déréférence de manière transparente les liens symboliques vers des fichiers et des dossiers en dehors d'un référentiel.

L'installer pour un compte utilisateur local est simple:

git clone https://github.com/Alcaro/GitBSLR.git
cd GitBSLR
./install.sh

Cela compilera la bibliothèque et créera un alias comme celui-ci dans ~/.bashrc:

alias git="LD_PRELOAD=/path/to/gitbslr.so git"

L'utilisation de cet alias permet le déréférencement de lien transparent.

marque
la source
1
C'est terrible! Mais cela fonctionne bien, donc c'est génial. Je vous remercie!
kay est déçu
C'est bizarre! Je l'aime tout simplement
Marcos Besteiro López
2

Envisagez d'utiliser un point de montage pour monter le dossier de destination (auquel vous effectuez actuellement un lien symbolique) pour qu'il apparaisse à l'emplacement auquel vous le souhaitez sous le projet git. J'ai utilisé cette approche avec succès.

Tony Garland
la source
1

Déplacez les fichiers dans le dossier et supprimez le lien symbolique. Git ne traverse pas les liens symboliques.

Il (et moi) supposerait que vous établissez une liaison symbolique avec un ensemble de fichiers que vous ne contrôlez pas ou que vous ne souhaitez pas modifier, en tant que tels, ils n'ont pas besoin d'être versionnés.

Josh K
la source
1
Je contrôle ces fichiers. Ce sont les feuilles de style, etc. et doivent se trouver dans un répertoire que le serveur servira.
Macha
1

Une autre solution de contournement - la seule que j'ai trouvée qui fonctionne également pour les répertoires - consiste à modifier l'arborescence de travail git pour les actions spécifiques.

git --work-tree=/home/me/code/project/ add /home/me/code/project/static/
git --work-tree=/home/me/code/project/ commit /home/me/code/project/static/
Ohad Cohen
la source