Git සංකේතාත්මක සබැඳි හසුරුවන්නේ කෙසේද?


1629

මා සතුව සංකේතාත්මක සබැඳියක් වන ගොනුවක් හෝ නාමාවලියක් තිබේ නම් සහ මම එය Git ගබඩාවකට කැප කළහොත් එයට කුමක් සිදුවේද?

ගොනුව මකා දමන තුරු එය සංකේතාත්මක සබැඳියක් ලෙස තබනු ඇතැයි මම සිතමි. ඉන්පසු ඔබ පැරණි අනුවාදයකින් ගොනුව ආපසු ඇද ගන්නේ නම් එය සාමාන්‍ය ගොනුවක් සාදයි.

මා සඳහන් කරන ගොනුව මකා දැමූ විට එය කරන්නේ කුමක්ද? එය හුදෙක් කරදරකාරී සම්බන්ධතාවයක් සිදු කරයිද?


20
.gitignoreසිම්ලින්ක් ෆෝල්ඩරයක් නොවන ගොනුවක් ලෙස දකී.
0xcaff

7
හොඳයි, පෙනෙන විදිහට එම පිළිතුරට වඩා ප්‍රශ්නයට වැඩි යමක් ඇත. උදාහරණයක් ලෙස, මම පහත සඳහන් දේ ගැන කල්පනා කරමි: මම එම ගබඩාවේ විශාල ගොනුවකට මගේ ගබඩාවේ සිම් සම්බන්ධකයක් සාදන්නේ නම්, වෙනස්කම් තල්ලු කර එම වෙනස්කම් වෙනත් යන්ත්‍රයකට අදින්නේ නම් කුමක් සිදුවේද? විශාල ගොනුව ස්ථාන දෙකෙහිම විශාල ගොනුවක් ලෙස ගබඩා කර තිබේද, නැතහොත් නව යන්ත්‍රයේ, සම්බන්ධක ගොනුව මුල් විශාල ගොනුවට යොමු වන පරිදි sym සබැඳිය සුරැකෙනු ඇත්ද?
jvriesem

7
මෙය පැරණි නූලක් නමුත් මෙම ප්‍රකාශය තවමත් ප්‍රයෝජනවත් විය හැකිය. Jviesem වලට ප්‍රතිචාර වශයෙන්, මෘදු සම්බන්ධකයක් යනු මූලික වශයෙන් වෙනත් ගොනුවක නම සහිත ගොනුවකි. එබැවින් ඔබ එය වෙනත් යන්ත්‍රයකට ඇද ගත් පසු, සබැඳිය බාගත වන අතර එය මුල් ගොනු පද්ධතියේ විශාල ගොනුවේ නම ඇත. නව යන්ත්‍රයේ නම වලංගු නොවේ නම්, සබැඳියට අවලංගු නමක් ඇත. විශාල ගොනුව නව යන්ත්‍රයට බාගත නොකෙරේ.
lasaro

6
@lasaro, git repo එකක ඇති බිඳුණු සම්බන්ධතා වළක්වා ගත හැකි ක්‍රමය ../..නම්, අවශ්‍ය පරිදි භාවිතා කරමින් සිම්ලින්ක් සෑදීමේදී සෑම විටම සාපේක්ෂ මාර්ග භාවිතා කිරීමයි.
වයිල්ඩ්කාඩ්

8
වින්ඩෝස් හි බොහෝ සංස්කරණ වලදී සිම්ලින්ක් නිර්මාණය කිරීම සඳහා ඔබට ඉහළ අවසර අවශ්‍ය බව සලකන්න. ඔබ වින්ඩෝස් git pullහි සිට සිම්ලින්ක් වෙනුවට ගොනුවක් සාදන්නේ නම්, ඔබව Git සේවාදායකයා පරිපාලක ලෙස ක්‍රියාත්මක කිරීමට උත්සාහ කරන්න.
axmrnv

Answers:


1361

Git සාමාන්‍ය ගොනුවකට සමානවම සබැඳියේ අන්තර්ගතය (එනම් එය සම්බන්ධ කරන ගොනු පද්ධති වස්තුවේ මාර්ගය) 'බ්ලොබ්' එකක ගබඩා කරයි. ඉන්පසු එය එහි අඩංගු නාමාවලිය නියෝජනය කරන ගස් වස්තුව තුළ නම, මාදිලිය සහ වර්ගය (එය සිම්ලින්ක් යන කාරණය ඇතුළුව) ගබඩා කරයි.

ඔබ සබැඳිය අඩංගු ගසක් පරික්ෂා කරන විට, ඉලක්කගත ගොනු පද්ධති වස්තුව පවතින්නේද නැද්ද යන්න නොසලකා එය වස්තුව සිම්ලින්ක් ලෙස ප්‍රතිස්ථාපනය කරයි.

සිම්ලින්ක් යොමු කරන ගොනුව ඔබ මකා දැමුවහොත් එය Git- පාලිත සිම්ලින්ක් වෙත කිසිදු ආකාරයකින් බලපාන්නේ නැත. ඔබට භයානක සඳහනක් ඇත. අවශ්‍ය නම් වලංගු දෙයක් වෙත යොමු කිරීම සඳහා සබැඳිය ඉවත් කිරීම හෝ වෙනස් කිරීම පරිශීලකයා සතු ය.


328
BTW. ඔබ සංකේතාත්මක සබැඳි සඳහා සහය නොදක්වන FAT වැනි ගොනු පද්ධතියේ සිටී නම් සහ ඔබේ ගබඩාව ඒවා භාවිතා කරන්නේ නම්, ඔබට core.symlinksවින්‍යාස විචල්‍යය අසත්‍ය ලෙස සැකසිය හැකි අතර, සම්බන්ධක පෙළ අඩංගු කුඩා සරල පෙළ ගොනු ලෙස සමමුහුර්ත පරීක්ෂා කරනු ලැබේ.
ජකුබ් නාරබ්ස්කි

14
@ ජකුබ්නාරබ්ස්කි මම මීට පෙර මෙය දුටුවෙමි. අප භාවිතා කරන පුස්තකාලයකට යන මාර්ගයක් සහිත එක් රේඛාවක් සහිත පෙළ ගොනුවක් අපගේ ගබඩාවේ තිබුණි. එහි අරමුණ කුමක්දැයි වටහා ගැනීමට නොහැකි විය. මම දැන් දන්නවා මොකද උනේ කියලා.
මැට් කේ

25
ඉහළ නංවන ලද පිළිතුරක් ගැන අදහස් දැක්වීමට මම අදිමදි කරමි, නමුත් "සාමාන්‍ය ගොනුවකට මෙන්" යන වාක්‍ය ඛණ්ඩය නවකයන්ට නොමඟ යවන සුළු යැයි මම සිතමි.
මැතිව් හැනිගන්

10
(සංස්කරණ කාලය ඉවරයි) එය සාමාන්‍ය ගොනුවකට සමාන වන්නේ අන්තර්ගතය පිපිරුමක පමණි. තීරණාත්මක වෙනස නම් සාමාන්‍ය ගොනුවක් සඳහා බ්ලොබ් යනු ගොනු අන්තර්ගතය වන නමුත් සමමුහුර්තයක් සඳහා බ්ලොබ් එකට එය සම්බන්ධ කරන ගොනුවේ මාර්ග නාමය ඇත. @ ජකුබ්නාරබ්ස්කි "කුඩා සරල පෙළ ලිපිගොනු" සම්බන්ධයෙන් .. ඒවා කුඩා හා පෙළ යැයි ඔබ සිතනු ඇත, නමුත් ඇත්ත වශයෙන්ම බ්ලොබ් එකක් පිපිරීමක් වන අතර එය විශාල හා ද්විමය විය හැකිය. ගොනුවක් සිම්ලින්ක් ලෙස වැරදි ලෙස ටයිප් කළ විට stackoverflow.com/questions/18411200/… බලන්න .
මැතිව් හැනිගන්

2
සිම්ලින්ක් සඳහා ඔබගේ ගෝලීය සැකසුම් සහ සිම්ලින්ක් සඳහා දේශීය සැකසුම් පරීක්ෂා කිරීමට වග බලා ගන්න. සැකසුම් TortiseGit හෝ කවුළු වලින් පිටපත් කර ඇත්නම්, එවිට ඔබට ඒවා symlinks = falseඅවුල් කළ හැකිය.
phyatt

258

ගොනුවක් දර්ශකයට එකතු කළ විට එය කරන්නේ කුමක්දැයි බැලීමෙන් Git කරන්නේ කුමක්දැයි ඔබට දැනගත හැකිය. දර්ශකය පූර්ව කැපවීමක් වැනි ය. දර්ශකය කැපවීමෙන්, ඔබට දර්ශකයේ git checkoutතිබූ සියල්ල නැවත වැඩ කරන නාමාවලියට ගෙන ඒමට භාවිතා කළ හැකිය . ඉතින්, ඔබ දර්ශකයට සංකේතාත්මක සබැඳියක් එක් කළ විට Git කරන්නේ කුමක්ද?

සොයා ගැනීමට, පළමුව, සංකේතාත්මක සබැඳියක් සාදන්න:

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

Git තවමත් මෙම ගොනුව ගැන නොදනී. git ls-filesඔබේ දර්ශකය පරීක්ෂා කිරීමට ඔබට ඉඩ දෙයි ( -sමුද්‍රණයට statසමාන ප්‍රතිදානය):

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

දැන්, සංකේතාත්මක සබැඳියේ අන්තර්ගතය දර්ශකයට එකතු කිරීමෙන් Git වස්තු ගබඩාවට එක් කරන්න. ඔබ දර්ශකයට ගොනුවක් එකතු කළ විට, Git එහි අන්තර්ගතය Git වස්තු ගබඩාවේ ගබඩා කරයි.

$ git add ./symlink

ඉතින්, එකතු කළේ කුමක්ද?

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

හැෂ් යනු Git වස්තු ගබඩාවේ නිර්මාණය කරන ලද ඇසුරුම් කරන ලද වස්තුව පිළිබඳ සඳහනකි. .git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15cඔබේ ගබඩාවේ මුල දෙස බැලුවහොත් ඔබට මෙම වස්තුව පරීක්ෂා කළ හැකිය . Git ගබඩාවේ ගබඩා කරන ගොනුව මෙයයි, ඔබට පසුව පරීක්ෂා කළ හැකිය. ඔබ මෙම ගොනුව පරීක්ෂා කළහොත්, එය ඉතා කුඩා බව ඔබට පෙනෙනු ඇත. එය සම්බන්ධිත ගොනුවේ අන්තර්ගතය ගබඩා නොකරයි.

(සටහන 120000යනු ls-filesප්‍රතිදානයේ ලැයිස්තුගත කර ඇති ප්‍රකාරයයි. එය 100644සාමාන්‍ය ගොනුවකට සමාන වේ.)

නමුත් ඔබ මෙම වස්තුව නිධියෙන් සහ ගොනු පද්ධතියට පරීක්ෂා කර බැලීමේදී Git කරන්නේ කුමක්ද? එය core.symlinksවින්‍යාසය මත රඳා පවතී . සිට man git-config:

core.symlinks

සාවද්‍ය නම්, සංකේතාත්මක සබැඳි සබැඳි පෙළ අඩංගු කුඩා සරල ගොනු ලෙස පරීක්ෂා කරනු ලැබේ.

එබැවින්, ගබඩාවේ සංකේතාත්මක සබැඳියක් සමඟ, පිටවීමේදී ඔබට සම්පූර්ණ ගොනු පද්ධති මාර්ගයක් ගැන සඳහනක් සහිත පෙළ ගොනුවක් ලැබෙනු ඇත, නැතහොත් core.symlinksවින්‍යාසයේ වටිනාකම මත පදනම්ව නිසි සංකේතාත්මක සම්බන්ධකයක් ඇත.

කෙසේ හෝ සිම්ලින්ක් මඟින් යොමු කරන ලද දත්ත ගබඩාවේ ගබඩා නොවේ.


1
භයානක පිළිතුර
CervEd

147

"සංස්කාරක" සටහන: මෙම ලිපියේ යල් පැන ගිය තොරතුරු අඩංගු විය හැකිය. 1.6.1 සිට Git හි වෙනස්කම් පිළිබඳව කරුණාකර අදහස් සහ මෙම ප්‍රශ්නය බලන්න .

සමමුහුර්ත නාමාවලි:

මෘදු සම්බන්ධකයක් වන නාමාවලියක් ඇති විට කුමක් සිදුවේද යන්න සටහන් කිරීම වැදගත්ය. යාවත්කාලීනයක් සහිත ඕනෑම Git අදින්න සබැඳිය ඉවත් කර එය සාමාන්‍ය නාමාවලියක් බවට පත් කරයි. මෙය මම අමාරුවෙන් ඉගෙන ගත් දෙයකි. මෙහි සහ මෙහි සමහර තීක්ෂ්ණ බුද්ධිය .

උදාහරණයක්

කලින්

 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

4
සිම්ලින්ක් කරන ලද නාමාවලි පිළිබඳ මෙම අනතුරු ඇඟවීම් අනුවාදගත සිම්ලින්ක් සඳහා අදාළ නොවන බව සඳහන් කිරීම වටී . ප්‍රශ්නයේ ඇති ප්‍රධානතම සිද්ධිය නම්, වැඩ කරන ගස සමහරක් හෝ සියල්ලම වෙනත් මාර්ගයකට සමමුහුර්ත කිරීම (වැඩි තැටියක් සහිත වෙනත් කොටසකට කියන්න) සහ පවතින සිම්ලින්ක් හරහා කේත පරීක්ෂා කිරීමට git අපේක්ෂා කිරීමයි. I.e.
ජෝන් විට්ලි

ඉහත හැසිරීම git 1.6.5.6 සමඟ පරීක්ෂා කර ඇත; නමුත් සෑහෙන කාලයක් තිස්සේ අනුවාදගත හැසිරීම නිවැරදිව සිදුවී ඇතැයි මම තරයේ සැක කරමි.
ජෝන් විට්ලි

22
මෙම හැසිරීම git හි සියලුම සංස්කරණ වල තිබේද? නැතහොත් මෙය නිවැරදි කර තිබේද?
jbotnik

24
මෙම හැසිරීම දැන් සවි කර ඇති බවක් පෙනේ, බලන්න: stackoverflow.com/a/1943656/1334781
රොන් වර්ට්ලන්

2
ශෙකාර්: මෑත වසරවල git හි වෙනස්කම් පිළිබිඹු කිරීම සඳහා ඔබේ පිළිතුර සංස්කරණය කරන්නද?
einpoklum
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.