Come posso fare in modo che git esegua il commit dei file in una cartella con link simbolici


19

Ho due cartelle:

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

Nella /home/me/code/projectcartella, ho un link simbolico statica/srv/www/projectfiles/

cioè /home/me/code/project/static/->/srv/www/projectfiles/

Quando provo a eseguire il commit ora, non vede alcun file dietro il collegamento simbolico e cerca invece di eseguire il commit del collegamento simbolico stesso come file.

Come posso eseguire il commit di un file (ad es. /srv/www/projectfiles/style.css) Dietro al link simbolico?

Risposte:


12

Una soluzione alternativa sarebbe quella di avere / srv / www / projectfiles come link simbolico a / home / me / code / project / static in modo che git non veda link simbolici


Quindi stai sostanzialmente invertendo la logica? Conservare i file / le cartelle richiesti nella cartella Git e quindi inserire un collegamento simbolico altrove (dove risiedono i file / le cartelle originali utilizzati)?
RusI,

@Rusl Sì esattamente questo
user151019

Ma allora come posso fare la personalizzazione locale dei file? Dovrei avere un repository separato per ogni macchina? Perde l'intero punto.
Ashnur,

Bene, la personalizzazione locale non sarà in git
user151019

3

Se stai usando Linux, mi piace particolarmente la soluzione fornita da GitBLSR . È una libreria che viene caricata tramite LD_PRELOAD che trasferisce in modo trasparente collegamenti simbolici a file e cartelle all'esterno di un repository.

Installarlo per un account utente locale è semplice:

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

Questo compilerà la libreria e creerà un alias come il seguente in ~/.bashrc:

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

L'uso di questo alias abilita il dereferenziamento del collegamento trasparente.


1
È terribile! Ma funziona bene, quindi è fantastico. Grazie!
Kay è deluso a SE il

Quello è strano! Lo adoro
Marcos Besteiro López

2

Prendi in considerazione l'utilizzo di un punto di montaggio per montare la cartella di destinazione (a cui attualmente fai il collegamento simbolico) affinché appaia nella posizione desiderata sotto il progetto git. Ho usato questo approccio con successo.


1

Spostare i file nella cartella e rimuovere il collegamento simbolico. Git non attraversa i collegamenti simbolici.

Supponiamo che tu stia collegando a un insieme di file che non controlli o che non desideri modificare, in quanto tali non devono essere sottoposti a versione.


1
Controllo questi file. Sono i fogli di stile, ecc. E devono trovarsi in una directory su cui verrà utilizzato il server.
Macha,

1

Un'altra soluzione alternativa - l'unica che ho scoperto che funziona anche per le directory - è cambiare l'albero di lavoro di git per le azioni specifiche.

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/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.