সরাসরি ট্যারে এসভিএন


14

এসভিএন লুকানো ফাইলগুলি ব্যতীত কোনও এসভিএন ফোল্ডারের সর্বশেষ সংস্করণটি সরাসরি ছড়িয়ে দেওয়ার কোনও উপায় আছে কি? আমি এসভিএন ফাইল ছাড়াই একটি টার সংরক্ষণাগার তৈরি করতে চাই। আমি জানি আপনি এসভিএন ট্র্যাকিং ফাইলগুলির সাথে সর্বশেষতমটি পেতে পারেন, তবে এমন একটি লাইনার রয়েছে যা তথ্য সরাসরি একটি সংরক্ষণাগারে প্রেরণ করবে?


আমি এসএনএন সম্পর্কে জানি না, তবে গিথুব আপনাকে গিট রেপোর .tar.gzs ডাউনলোড করতে দেয়।
মাচা

উত্তর:


12

সমস্ত .svn ফোল্ডার ছাড়াই একটি সংগ্রহস্থলের সর্বশেষ সংস্করণটির অনুলিপি তৈরির সহজ উপায় হ'ল svn exportকমান্ডটি ব্যবহার করা ।

এখানে আমি সংরক্ষণাগারটি কীভাবে করব:

$ svn export URL PATH ; tar czf exported_copy.tgz PATH

যেখানে URL হ'ল আপনার এসএনএন সংগ্রহস্থলের URL এবং PATH রফতানির সংগ্রহের অনুলিপি সংরক্ষণের জন্য উপযুক্ত স্থানীয় পথ। আমি এর চেয়ে সরাসরি এটি করার কোনও উপায় জানি না। দুর্ভাগ্যক্রমে আপনি রফতানি অনুলিপিটি ঝুলিয়ে রেখেছেন, সুতরাং আপনি কেবল পুরো জিনিসটি একটি ছোট ব্যাশ স্ক্রিপ্টে রাখতে চান যা পরে টেম্প ফাইলগুলি মুছে দেয়।

সম্পাদনা করুন: যদিও এটি সবচেয়ে সহজ পদ্ধতি এবং আমি যা ব্যবহার করেছি তা সতর্কতা অবলম্বন করব। আমার গবেষণায় আমি এটি দেখতে পেয়েছি http://narfation.org/2009/01/08/creating-recreatable-tar-gz-from-svn যা সংরক্ষিত গোষ্ঠী / ব্যবহারকারীর মালিকানার সমস্যাটি স্পষ্টভাবে আমাদের জানায় যা অন্যকে মোতায়েন করার সময় সমস্যা সৃষ্টি করে পদ্ধতি. আমার উদ্দেশ্য অনুসারে আমি নিজের পরিবর্তনের সাহায্যে এই স্ক্রিপ্টটি চেষ্টা করেছি এবং আপনিও উপকৃত হতে পারেন।


11

সম্ভবত টার এর সংস্করণ 1.23 আপনাকে সমস্ত সংস্করণ ফাইলগুলি কমান্ড লাইন থেকে বাদ দিতে দেয় কিন্তু দুর্ভাগ্যক্রমে আমার 1.20 সংস্করণে কাজ করবেন না:

tar --exclude-vcs -cvzf archive.tar.gz directory/

খুব সুন্দর! আমি এই বিকল্প সম্পর্কে জানতাম না ।
পিটার মারে

4

সাবভারশন ওয়ার্কিং ডিরেক্টরিতে যান (চেকআউট) এবং এটি চালান:

find -name .svn -prune -o -print | cpio -o -H tar | gzip > archive.tar.gz

আপনি যদি জিএনইউ ইউটিলিটিগুলি ব্যবহার করে থাকেন তবে আপনি চালাতে পারেন:

find -name .svn -prune -o -print0 | cpio -o -0 -H tar | gzip > archive.tar.gz

যদি সম্ভব হয় তবে আমি ustar ফর্ম্যাটটি ব্যবহার করার পরামর্শ দেব -H ustar


3

আমিও দেখতে পাচ্ছি:

tar cvfz archive.tar.gz directory/  --exclude='*/.svn'

ধন্যবাদ টার।


2

যদি আমি সঠিকভাবে বুঝতে পারি, আপনি কি কোনও এসএনএন চেকআউটের ফলাফল টানতে চান?

সুতরাং, সিউডোকোডে, এটি এর মতো দেখতে চাই:

svn export branch; find branch | grep -v '/.' | xargs cp tarbranch ; tar -zcf tarbranch.tgz tarbranch

0

এটি আমার লেখা ওয়ান-লাইনার থেকে অভিযোজিত। এটি ধরে নিয়েছে আপনার একটি ~ / tmp ডিরেক্টরি রয়েছে। আপনাকে প্রথম দুটি পদক্ষেপে PROJ এবং URL ভেরিয়েবলগুলি পরিবর্তন করতে হবে। বাকী কাজ করা উচিত।

সহজে অনুলিপি করার জন্য:

PROJ='yourproj' && URL='http://svn.example.com/svn/repo/$PROJ' && REV=`svn info $URL | fgrep Revision | cut -d ' ' -f 2` &&  cd ~/tmp &&  svn export $URL $PROJ && tar czv -f $PROJ.r$REV.tar.gz $PROJ && rm -r $PROJ.r$REV

সহজে দেখার জন্য:

PROJ='yourproj' && 
URL='http://svn.example.com/svn/repo/$PROJ' && 
REV=`svn info $URL | fgrep Revision | cut -d ' ' -f 2` &&  
cd ~/tmp && 
svn export $URL $PROJ && 
tar czv -f $PROJ.r$REV.tar.gz $PROJ && 
rm -r $PROJ.r$REV

0

এটি একটি এসভিএন রেপো থেকে একটি ডিস্ট্রিমেন্টিক টার্বল তৈরি করার চেষ্টা করার আমার প্রচেষ্টা।

GNU টার 1.27 বা তার পরে প্রয়োজন।

বৈশিষ্ট্য:

  • নির্ধারিত টার্বল
  • এসভিএন থেকে মাইক্রোসেকেন্ডে টাইমস্ট্যাম্প নির্ভুলতা, paxবর্ধিত শিরোলেখকে ধন্যবাদ
  • সংরক্ষণাগার মন্তব্যগুলিতে সংরক্ষণ আইডিটি ঠিক তেমনই git archiveকরবে
  • আমি উভয় .tar.gzএবং .tar.xzসংকোচনের প্রদর্শন । Gzip, জন্য, আপনি ব্যবহার করে কম্প্রেশন আরও নিখুত হতে পারে advdefথেকে AdvanceCOMP ( advdefzopfli গ্রন্থাগার ব্যবহার করে)।

উদাহরণ হিসাবে, আমি টারবালটি চেকআউট এবং তৈরির জন্য উত্স হিসাবে সাবভার্সন রেপো ব্যবহার করি। মনে রাখবেন যে এসভিএন তাদের টার্বলগুলি প্যাকেজ করার উপায় নয় এবং আমি এসভিএন বিকাশের সাথে সম্পর্কিত কোনও উপায় নেই। সর্বোপরি এটি একটি উদাহরণ মাত্র ।

# URL of repository to export
url="https://svn.apache.org/repos/asf/subversion/tags/1.9.7/"
# Name of distribution sub-directory
dist_name=subversion-1.9.7-test
# ---------------------------------------------------------------------

info=$(svn info --xml "$url" | tr -- '\t\n' '  ')
revision=$(echo "$info" |
    sed 's|.*<commit[^>]* revision="\{0,1\}\([^">]*\)"\{0,1\}>.*|\1|')
tar_name=${dist_name}-r${revision}
# Subversion's commit timestamps can be as precise as 0.000001 seconds,
# but sub-second precision is only available through --xml output
# format.
date=$(echo "$info" |
    sed 's|.*<commit[^>]*>.*<date>\([^<]*\)</date>.*</commit>.*|\1|')

# Factors that would make tarball non-deterministic include:
# - umask
# - Ordering of file names
# - Timestamps of directories ("svn export" doesn't update them)
# - User and group names and IDs
# - Format of tar (gnu, ustar or pax)
# - For pax format, the name and contents of extended header blocks

umask u=rwx,go=rx
svn export -r "$revision" "$url" "$dist_name"
# "svn export" will update file modification time to latest time of
# commit that modifies the file, but won't do so on directories.
find . -type d | xargs touch -c -m -d "$date" --

trap 's=$?; rm -f "${tar_name}.tar" || : ; exit $s' 1 2 3 15
# pax extended header allows sub-second precision on modification time.
# The default extended header name pattern ("%d/PaxHeaders.%p/%f")
# would contain a process ID that makes tarball non-deterministic.
# "git archive" would store a commit ID in pax global header (named
# "pax_global_header"). We can do similar.
# GNU tar (<=1.30) has a bug that it rejects globexthdr.mtime that
# contains fraction of seconds.
pax_options=$(printf '%s%s%s%s%s%s' \
    "globexthdr.name=pax_global_header," \
    "globexthdr.mtime={$(echo ${date}|sed -e 's/\.[0-9]*Z/Z/g')}," \
    "comment=${revision}," \
    "exthdr.name=%d/PaxHeaders/%f," \
    "delete=atime," \
    "delete=ctime")
find "$dist_name" \
    \( -type d -exec printf '%s/\n' '{}' \; \) -o -print |
    LC_ALL=C sort |
    tar -c --no-recursion --format=pax --owner=root:0 --group=root:0 \
    --pax-option="$pax_options" -f "${tar_name}.tar" -T -

# Compression (gzip/xz) can add additional non-deterministic factors.
# xz format does not store file name or timestamp...
trap 's=$?; rm -f "${tar_name}.tar.xz" || : ; exit $s' 1 2 3 15
xz -9e -k "${tar_name}.tar"

# ...but for gzip, you need either --no-name option or feed the input
# from stdin. This example uses former, and also tries advdef to
# optimize compression if available.
trap 's=$?; rm -f "${tar_name}.tar.gz" || : ; exit $s' 1 2 3 15
gzip --no-name -9 -k "${tar_name}.tar" &&
{ advdef -4 -z "${tar_name}.tar.gz" || : ; }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.