Сим символдық байланыстарды қалай өңдейді?

Егер менде файл немесе каталог бар, ол символдық сілтеме болып табылады және мен оны Git қоймасына орналастырсам, онда не болады?

Файлды жойғанға дейін оны символдық сілтеме ретінде қалдыруды ұсынамын, содан кейін файлды ескі нұсқасынан шығарсаңыз, ол қалыпты файлды жасайды.

Ол сілтеме жасаған файлды жойғанда не істейді? Ол ілулі байланыс орнатады ма?

1369
05 июня '09 в 9:53 2009-06-05 09:53 Алекс 05 маусым '09 күні 9:53-да орнатылды 2009-06-05 09:53
@ 3 жауаптар

Git жай сілтеме мазмұнын сақтайды (яғни, оған сілтеме жасайтын файлдық жүйе нысанына жол) «blob» ішінде, әдеттегі файл үшін жасалған. Содан кейін, оның құрамында каталогы бар ағаш нысанындағы атауды, режимді және түрін (оның символдық сілтеме екендігін қоса) сақтайды.

Сілтемесі бар ағаштан шыққан кезде, ол мақсатты файлдық жүйе нысанының бар-жоқтығына қарамастан, ол нысанды символикалық сілтеме ретінде қалпына келтіреді.

Егер символдық сілтеме арқылы сілтеме жасалған файлды жойсаңыз, ол Git басқаратын символдық сілтемеге әсер етпейді. Сізде ілінетін сілтеме болады. Пайдаланушы қажет болса, бір нәрсені жарамды деп көрсету үшін сілтемені жоюы немесе өзгертуі мүмкін.

1146
05 июня '09 в 10:01 2009-06-05 10:01 Жауап CB Bailey 05 маусым '09 10:01 2009-06-05 10:01

Tl; DR: Символдық сілтемеден алынған деректер репозиторийде сақталмайды.


Git файлды индекске қосқанда не істеп жатқанын көру арқылы файлға не істейтінін білуге ​​болады. Индекс префикске ұқсас. Индексті бекітіп болғаннан кейін, индекстегі барлық деректерді жұмыс каталогына қайтару үшін, git checkout пайдалана аласыз. Git индекске символдық сілтеме қосқанда не істейді?

Білу үшін алдымен символдық байланыс жасаңыз:

 $ ln -s /path/referenced/by/symlink symlink 

Git әлі бұл файл туралы білмейді. git ls-files stat ( -s stat тәрізді) тексеруге мүмкіндік береді:

 $ git ls-files -s ./symlink [nothing] 

Енді индекске қосып, Git нысан қоймасына символдық сілтеме мазмұнын қосыңыз. Файлды индексіне қосқан кезде, Git өзінің мазмұнын Git нысан қоймасына сақтайды.

 $ git add ./symlink 
border=0

Сонымен, не қосылды?

 $ git ls-files -s ./symlink 120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink 

Хэш - Git нысан қоймасында жасалған бумаланған нысанға сілтеме. Бұл нысанды репозиторийдің түбірінде .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c қарап шығу арқылы .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c аласыз. Бұл файл Git дүкенін және символдық сілтемесін қосқанда және жасаған кезде репозиторийден алынатын нәрсені білдіреді. Егер сіз бұл файлды тексерсеңіз, ол өте кішкентай екенін көресіз. Ол байланысты файлдың мазмұнын сақтамайды.

(Назар аударыңыз, 120000 ls-files көрсетілетін файлдық режим, ол тұрақты файл үшін 100644 сияқты болады.)

Бірақ оны сақтаудан және файлдық жүйеге шығарғанда, Git бұл нысанмен не істейді? Бұл core.symlinks конфигурациясына байланысты. man git-config :

core.symlinks

Егер жалған болса, сілтеме мәтіні бар кәдімгі қарапайым файл түрінде символдық сілтемелер алынып тасталады.

Осылайша, репозиторийде символдық байланыс бар болса, шығарып жатқанда, сіз файлдық жүйенің толық жолына сілтеме бар мәтіндік файлды немесе core.symlinks теңшелім мәніне байланысты дұрыс символдық сілтеме core.symlinks .

Кез келген жағдайда, символдық сілтеме арқылы сілтеме жасалған деректер репозиторийде сақталмайды.

172
13 сент. Жауап: Дмитрий Минковский 13 қыркүйек 2013-09-13 20:06 '13 at 20:06 2013-09-13 20:06

Редактордың есебі: Бұл хабарламада ескірген ақпарат болуы мүмкін. Git-дың 1.6.1-ден бастап өзгергені туралы ескертулер мен сұрақты қараңыз.

Символикалық каталогтар:

Жұмсақ байланыс болып табылатын каталог бар кезде не болатынын ескеру маңызды. Кез келген Git pull жаңартуы сілтемесін жаңартады және оны қалыпты каталогтар етеді. Бұл қиын жолды үйрендім. Мұнда және осы жерде кейбір идеялар .

мысалы

Дейін

  ls -l lrwxrwxrwx 1 admin adm 29 Sep 30 15:28 src/somedir -> /mnt/somedir 

git add/commit/push

 It remains the same 

git pull , кейбір жаңартулар табылды

  drwxrwsr-x 2 admin adm 4096 Oct 2 05:54 src/somedir 
143
02 окт. жауап 02 ақпан Shekhar беріледі . 2009-10-02 09:16 '09 сағат 9: 16-да 2009-10-02 09:16

қатысты басқа сұрақтарға немесе Сұрақ қойыңыз