GNU/Linux >> Belajar Linux >  >> Linux

Git dan tautan keras

Saya menemukan bahwa, dengan menggunakan pengait, Anda dapat menangkap git pull event (ketika ada sesuatu untuk ditarik...) menulis script event handler ke .git/hooks/post-merge berkas.

Pertama, Anda harus chmod +x itu.

Lalu, masukkan ln perintah di dalamnya untuk membuat ulang tautan keras di setiap tarikan. Rapi ya!

Berhasil, saya hanya membutuhkannya untuk proyek saya dan ls -i menunjukkan bahwa file ditautkan secara otomatis setelah pull .

Contoh saya tentang .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

PENTING:Seperti yang Anda lihat, jalur ke file apa pun di repositori Anda harus dimulai dengan $GIT_DIR , lalu tambahkan jalur relatif parsial ke file.

Juga penting:-f diperlukan, karena Anda membuat ulang file tujuan.

EDIT

Klien git modern tampaknya mendukung symlink dan hardlink di dalam repositori secara alami, bahkan ketika mendorong ke lokasi yang jauh dan kemudian menggandakannya. Saya tidak pernah merasa perlu lagi untuk menautkan di luar repo git...

$ 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

Kloning dari repositori git lokal

$ cd
$ git clone tmp/ teste_tmp
Cloning into 'teste_tmp'...
done.
$ cd teste_tmp/
$ ls
hardlink  symlink  x
$ cat symlink
123
$ cat hardlink
123

Kloning dari repositori jarak jauh

$ 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 juga menunjukkan hal penting:symlink harus didefinisikan secara relatif.


Objek 'pohon', mewakili direktori di Git, menyimpan nama file dan (subset dari) izin. Itu tidak menyimpan nomor inode (atau jenis file id lainnya). Oleh karena itu tautan keras tidak dapat direpresentasikan di git , setidaknya bukan tanpa alat pihak ketiga seperti metastore atau git-cache-meta (dan saya tidak yakin apakah itu mungkin bahkan dengan alat tersebut).

Git mencoba untuk tidak menyentuh file yang tidak perlu diperbarui, tetapi Anda harus memperhitungkan bahwa git tidak mencoba mempertahankan hardlink, sehingga dapat dipatahkan oleh git.

Tentang tautan simbolik yang mengarah ke luar repositori :git tidak memiliki masalah dengan mereka dan harus mempertahankan konten tautan simbolik ... tetapi kegunaan tautan semacam itu meragukan bagi saya, karena apakah tautan sym itu akan rusak atau tidak bergantung pada tata letak sistem file di luar repositori git, dan tidak di bawah kendali git.


Dari masalah msysgit ini

Titik persimpangan bukanlah tautan simbolis; oleh karena itu, tautan simbolis tidak didukung di msysGit.

Selain itu, tautan keras tidak pernah dilacak oleh Git .

Masalahnya berorientasi pada Windows (karena ini tentang msysgit) dan perdebatan tentang potensi dukungan symlink.
Tetapi komentar tentang tautan keras menyangkut Git secara umum.


Linux
  1. Cara Membuat Tautan Keras dan Simbolik di Linux

  2. Tautan keras dan tautan lunak di Linux dijelaskan

  3. Perbedaan Antara Tautan Simbolik dan Tautan Keras?

  1. Cara Membuat Tautan Lunak dan Keras di Linux

  2. Apa itu Tautan Lunak dan Tautan Keras di Sistem File Linux

  3. Perbedaan antara tautan lunak dan tautan keras di Linux

  1. Menyesuaikan terminal Linux saya dengan tmux dan Git

  2. Buat tautan keras dan lunak – Persiapan Ujian RHCSA

  3. RHEL 7 – RHCSA Catatan :Buat tautan keras dan lunak.