මම හිතන්නේ 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
... සහ එකම කාලරාමු බලන්න (අනුවාද පාලනය යටතේ තිබූ ගොනු සඳහා).
මෙය යමෙකුට උපකාරී වේ යැයි සිතමු,
චියර්ස්!