Jak zrobić pliki git commit w folderze z dowiązaniem symbolicznym

20

Mam dwa foldery:

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

W /home/me/code/projectfolderze, mam dowiązane staticdo/srv/www/projectfiles/

tj. /home/me/code/project/static/->/srv/www/projectfiles/

Kiedy próbuję zatwierdzić teraz, nie widzi on żadnych plików za dowiązaniem symbolicznym, a zamiast tego próbuje zatwierdzić samo dowiązanie symboliczne jako plik.

Jak zatwierdzić plik (np. /srv/www/projectfiles/style.css), Który znajduje się za dowiązaniem symbolicznym?

Macha
źródło

Odpowiedzi:

12

Obejściem tego problemu byłoby posiadanie / srv / www / projectfiles jako dowiązanie symboliczne do / home / me / code / project / static, więc git nie widzi żadnych dowiązań symbolicznych

użytkownik151019
źródło
Więc w zasadzie odwracasz logikę? Zachowaj wymagane pliki / foldery w folderze Git, a następnie umieść dowiązanie symboliczne w innym miejscu (gdzie znajdują się oryginalne pliki / foldery)?
Rus
@Rusl Tak właśnie to
user151019
Ale w jaki sposób mogę wykonać lokalne dostosowywanie plików? Czy powinienem mieć osobne repo dla każdej maszyny? Traci cały sens.
Ashnur
Cóż, lokalne dostosowywanie nie będzie możliwe
user151019
4

Jeśli używasz Linuksa, szczególnie podoba mi się rozwiązanie dostarczone przez GitBLSR . Jest to biblioteka ładowana przez LD_PRELOAD, która w przejrzysty sposób usuwa dowiązania symboliczne do plików i folderów poza repozytorium.

Aby zainstalować go dla lokalnego konta użytkownika, jest proste:

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

Spowoduje to skompilowanie biblioteki i utworzenie aliasu, takiego jak poniżej ~/.bashrc:

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

Użycie tego aliasu umożliwia transparentne odsyłanie linków.

znak
źródło
1
To straszne! Ale działa dobrze, więc jest świetnie. Dziękuję Ci!
Kay jest rozczarowany w SE
To jest dziwne! Po prostu to uwielbiam
Marcos Besteiro López
2

Rozważ użycie punktu montowania, aby zamontować folder docelowy (do którego obecnie łączysz symbolicznie), aby pojawił się w miejscu, w którym chcesz go umieścić pod projektem git. Z powodzeniem zastosowałem to podejście.

Tony Garland
źródło
1

Przenieś pliki do folderu i usuń dowiązanie symboliczne. Git nie przechodzi przez dowiązania symboliczne.

Zakładam (i ja), że tworzysz dowiązanie symboliczne do zestawu plików, których albo nie kontrolujesz, albo nie chcesz modyfikować, ponieważ nie wymagają one wersji.

Josh K.
źródło
1
Kontroluję te pliki. Są to arkusze stylów itp. I muszą znajdować się w katalogu, który serwer będzie serwował.
Macha,
1

Innym obejściem - jedynym, które znalazłem, które działa również dla katalogów - jest zmiana drzewa roboczego git dla określonych akcji.

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
źródło