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?

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


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.


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.


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.


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/
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.