Git'in deponun dışına işaret eden sembolik bağları tanımadığını düşünürsek, sabit bağları kullanırken herhangi bir sorun var mı?
Git onları kırabilir mi? Lütfen beni detaylı bilgiye yönlendirir misiniz?
Git'in deponun dışına işaret eden sembolik bağları tanımadığını düşünürsek, sabit bağları kullanırken herhangi bir sorun var mı?
Git onları kırabilir mi? Lütfen beni detaylı bilgiye yönlendirir misiniz?
Yanıtlar:
Git'teki dizinleri temsil eden 'ağaç' nesnesi, dosya adını ve (alt kümesini) izinleri depolar. İnode numarasını (veya başka tür bir dosya kimliğini) saklamaz. Bu nedenle sabit bağlantılar GIT'de temsil edilemez , en azından değil gibi üçüncü parti araçlar olmadan, metastore veya git-cache-meta (ve eminim o bile bu araçlarla mümkün olup olmadığını değilim).
Git, güncellenmesi gerekmeyen dosyalara dokunmamaya çalışır, ancak git'in sabit bağlantıları korumaya çalışmadığını, böylece git tarafından koparılabileceklerini hesaba katmalısınız.
Hakkında dışında deposunu işaret sembolik linkleri : git onlarla hiçbir sorun vardır ve sembolik bağlantıların içeriğini korumak gerekir ... ama bu tür bağlantıların yarar bu sembolik bağ kırık olup olmayacağı gibi bana şüpheli ya da değil dosya sistemi düzeni bağlıdır dışında git depo ve git'in kontrolü altında değil.
Hook'ları kullanarak git pull
, komut dosyası olay işleyicisini .git/hooks/post-merge
dosyaya yazarak olayı yakalayabileceğinizi (çekecek bir şey olduğunda ...) yakalayabileceğinizi öğrendim .
İlk önce chmod +x
buna ihtiyacınız var.
Ardından, ln
her çekişte sert bağlantıları yeniden oluşturmak için komutları içine yerleştirin. Düzgün ha!
Çalışıyor, sadece projem için buna ihtiyacım vardı ve ls -i
dosyaların daha sonra otomatik olarak bağlandığını gösteriyor pull
.
Örneğim .git/hooks/post-merge
:
#!/bin/sh
ln -f $GIT_DIR/../apresentacao/apresentacao.pdf $GIT_DIR/../capa/apresentacao.pdf
ln -f $GIT_DIR/../avaliacoesMono/avaliacao_monografias_2011_Nilo.pdf $GIT_DIR/../capa/avaliacoes.pdf
ln -f $GIT_DIR/../posters/poster_Nilo_sci.pdf $GIT_DIR/../capa/poster.pdf
ln -f $GIT_DIR/../monografia/monografia_Nilo.pdf $GIT_DIR/../capa/monografia_Nilo.pdf
ÖNEMLİ: Gördüğünüz gibi, deponuzdaki herhangi bir dosyanın yolu ile başlamalı $GIT_DIR
, ardından dosyaya kısmi göreceli yolu eklemelisiniz.
Ayrıca önemli: -f
hedef dosyayı yeniden oluşturduğunuz için gereklidir.
Modern git istemcisi, uzak bir konuma itip klonlarken bile, deponun içindeki sembolik bağlantıları ve sabit bağlantıları doğal olarak destekliyor gibi görünüyor. Gerçi bir daha git deposu dışında bağlantı kurma ihtiyacım olmadı ...
$ mkdir tmp
$ cd tmp
$ git --version
git version 2.24.3 (Apple Git-128)
$ git init .
Initialized empty Git repository in /Users/teixeira/tmp/.git/
$ mkdir x
$ cd x
$ echo 123 > original
$ cat original
123
$ cd ..
$ ln -s x/original symlink
$ cat symlink
123
$ ln x/original hardlink
$ cat hardlink
123
$ git add .
$ git commit -m 'Symlink and hardlink commit'
[master (root-commit) 8df3134] Symlink and hardlink commit
3 files changed, 3 insertions(+)
create mode 100644 hardlink
create mode 120000 symlink
create mode 100644 x/original
$ cd
$ git clone tmp/ teste_tmp
Cloning into 'teste_tmp'...
done.
$ cd teste_tmp/
$ ls
hardlink symlink x
$ cat symlink
123
$ cat hardlink
123
$ cd ~/tmp
$ git remote add origin https://github.com/myUser/myRepo.git
$ git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 361 bytes | 361.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To https://github.com/myUser/myRepo.git
+ 964dfce...8df3134 master -> master
$ cd ../
$ git clone https://github.com/myUser/myRepo.git
Cloning into 'myRepo'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 5 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.
$ cd myRepo/
$ cat symlink
123
$ cat hardlink
123
https://github.com/mokacoding/symlinks ayrıca önemli bir şeye işaret ediyor: sembolik bağlar göreceli olarak tanımlanmalıdır.
Birleşme noktaları sembolik bağlantılar değildir; bu nedenle sembolik bağlantılar msysGit'te desteklenmez.
Ayrıca, sabit bağlantılar asla Git tarafından izlenmedi .
Sorun Windows yönelimliydi (çünkü mesysgit hakkında) ve sembolik bağın olası desteği hakkında tartışma.
Ancak sabit bağlantı hakkındaki yorum genel olarak Git ile ilgilidir.
Google 'git sabit bağlantıları koruyor' ve bu, git'in AFAIK sabit bağlantı yapısını, belki de tasarım gereği nasıl koruyacağını bilmediğini gösteriyor.
Benim web projelerim aşağıdaki gibi sabit bağlantılar kullanıyor:
www/products/index.php
www/products/dell_latitude_id577/index.php #(hard linked to above)
www/products/dell_inspiron_id323/index.php #(hard linked again to above)
me@server:www/products$ ls -l index.php
-rwxr-xr-x 3 me me 1958 Aug 22 22:10 index.php*
İndex.php'de değişiklik yapmak istersem, onu bir yerde değiştiririm ve sabit bağlantılar (ürün detay sayfaları) değişiklikleri gösterir - sadece git, klonlama ve diğer bilgisayarları çekme sırasında bu ilişkiyi korumaz.
me@server:www$ git pull
başka bir makinede her sabit bağlantı için yeni bir index.php yaratacaktır.
hardlink --ignore-time
üzerinde /var/lib/jenkins
bazı disk alanını geri kazanmak. Gün boyunca bazı dosyaların sabit bağlantısı kaldırıldıktan sonra git pull
veya mvn compile
bu sorun değil, bunun olmasını bekliyorum. Git sabit bağlantıları korumak için olsaydı, disk alanı geri dönüştürme stratejim işe yaramazdı.