මම හිතන්නේ red ඇඩ්රිඩෙල්ගේ පෝස්ට් එක කිට්ටුමයි , නමුත් ඊට තව ටිකක් තියෙනවා - ඒ නිසා මම මෙය මෙහි එකතු කරමි; කාරණය නම්, svnඔබ repo එකක උප ෆෝල්ඩරයක සිටී නම් සහ ඔබ කරන්නේ:
/media/disk/repo_svn/subdir$ svn export . /media/disk2/repo_svn_B/subdir
පසුව svnසංශෝධනය පාලනය (ඔවුන් ද නැවුම් එකතු විය හැකි, හෝ තත්ත්වය Modified) යටතේ ඇති සියළුම ගොනු අපනයනය කරනු ඇත - ඔබ එම බහලුම තුල වෙනත් "නිසරු" නම් (මම ගණන් නෑ .svnමෙතන subfolders, නමුත් පියවි ඇසට පෙනෙන දේවල් .oගොනු) , එය අපනයනය නොකරනු ඇත; SVN repo විසින් ලියාපදිංචි කරන ලද ගොනු පමණක් අපනයනය කරනු ලැබේ. මට නම්, එක් හොඳ දෙයක් නම්, මෙම අපනයනයට තවමත් සිදු කර නොමැති දේශීය වෙනස්කම් සහිත ලිපිගොනු ඇතුළත් ය ; තවත් හොඳ දෙයක් නම්, අපනයනය කරන ලද ලිපිගොනු වල කාලරාමු මුල් ලිපිගොනු වලට සමාන වීමයි. නැතහොත්, එය svn help exportපවසන පරිදි:
- PATH1 විසින් නිශ්චිතව දක්වා ඇති වැඩ කරන පිටපතෙන් REV සංශෝධනයෙන් පිරිසිදු ඩිරෙක්ටරි ගසක් අපනයනය කරයි. ... REV නිශ්චිතව දක්වා නොමැති නම්, සියලුම දේශීය වෙනස්කම් සුරැකෙනු ඇත. අනුවාද පාලනය යටතේ නැති ගොනු පිටපත් නොකෙරේ.
gitඑය කාලරාමුව ආරක්ෂා නොකරන බව වටහා ගැනීම සඳහා, මෙම විධානයන්හි ප්රතිදානය සංසන්දනය කරන්න ( gitඔබ කැමති රිපෝ එකක උප ෆෝල්ඩරයක ):
/media/disk/git_svn/subdir$ ls -la .
... සහ:
/media/disk/git_svn/subdir$ git archive --format=tar --prefix=junk/ HEAD | (tar -t -v --full-time -f -)
... සහ, කෙසේ වෙතත්, git archiveසංරක්ෂිත ගොනුවේ සියලුම කාලරාමු එක හා සමාන වීමට හේතු වන බව මම දනිමි ! git help archiveපවසයි:
කැපවීමේ හැඳුනුම්පතක් හෝ ටැග් හැඳුනුම්පතක් ලබා දෙන විට ගස හැඳුනුම්පතක් ලබා දෙන විට git සංරක්ෂිතය වෙනස් ලෙස හැසිරේ. පළමු අවස්ථාවේ දී සංරක්ෂිතයේ එක් එක් ගොනුවේ වෙනස් කිරීමේ කාලය ලෙස වත්මන් කාලය භාවිතා වේ. අවසාන අවස්ථාවෙහිදී, යොමු කරන ලද බැඳීම් වස්තුවෙහි සටහන් කර ඇති කැපවීමේ කාලය ඒ වෙනුවට භාවිතා වේ.
... නමුත් පෙනෙන ආකාරයට අවස්ථා දෙකම " එක් එක් ගොනුවේ වෙනස් කිරීමේ කාලය" නියම කරයි ; එමගින් එම ලිපිගොනු වල සත්ය කාලරාමු ආරක්ෂා නොකෙරේ !
එබැවින්, කාලරාමු ආරක්ෂා කර ගැනීම සඳහා, මෙහි bashපිටපතක් ඇත, එය ඇත්ත වශයෙන්ම "එක්-ලයිනර්" වේ, තරමක් සංකීර්ණ වුවත් - එබැවින් ඊට පහළින් පේළි කිහිපයකින් පළ කර ඇත:
/media/disk/git_svn/subdir$ git archive --format=tar master | (tar tf -) | (\
DEST="/media/diskC/tmp/subdirB"; \
CWD="$PWD"; \
while read line; do \
DN=$(dirname "$line"); BN=$(basename "$line"); \
SRD="$CWD"; TGD="$DEST"; \
if [ "$DN" != "." ]; then \
SRD="$SRD/$DN" ; TGD="$TGD/$DN" ; \
if [ ! -d "$TGD" ] ; then \
CMD="mkdir \"$TGD\"; touch -r \"$SRD\" \"$TGD\""; \
echo "$CMD"; \
eval "$CMD"; \
fi; \
fi; \
CMD="cp -a \"$SRD/$BN\" \"$TGD/\""; \
echo "$CMD"; \
eval "$CMD"; \
done \
)
ඔබ "වත්මන්" නාමාවලියෙහි (ඉහළ, /media/disk/git_svn/subdir) අන්තර්ගතය අපනයනය කරන බවට උපකල්පනය කර ඇති බව සලකන්න - ඔබ අපනයනය කරන ගමනාන්තය තරමක් අපහසුතාවයට පත් කර ඇත, නමුත් එය DESTපරිසර විචල්යයක පවතී. මෙම පිටපත සමඟ; DESTඉහත ස්ක්රිප්ට් ධාවනය කිරීමට පෙර ඔබ විසින්ම ඩිරෙක්ටරිය ඔබ විසින්ම නිර්මාණය කළ යුතුය .
ස්ක්රිප්ට් ධාවනය වූ පසු, ඔබට සැසඳිය හැකි විය යුතුය:
ls -la /media/disk/git_svn/subdir
ls -la /media/diskC/tmp/subdirB # DEST
... සහ එකම කාලරාමු බලන්න (අනුවාද පාලනය යටතේ තිබූ ගොනු සඳහා).
මෙය යමෙකුට උපකාරී වේ යැයි සිතමු,
චියර්ස්!