সাবট্রিশন সংগ্রহস্থল থেকে গিট-এসএনএন শেষ এন সংশোধনগুলি কীভাবে ক্লোন করবেন?


314

সমস্যা

সাবসার্শন সংগ্রহস্থল থেকে আপনি গিট-এসএনএন দিয়ে অগভীর অনুলিপিটি কীভাবে তৈরি করবেন, যেমন আপনি কেবলমাত্র সর্বশেষ তিনটি সংশোধনী টানবেন?

git cloneকমান্ড একটি গীত সংগ্রহস্থল থেকে গত এন পুনর্বিবেচনা পেতে পারেন যদি আপনি বিকল্প ব্যবহার --depth, আপনি সংগ্রহস্থলের একটি অগভীর কপি পেতে অর্থাৎ। উদাহরণ:

git clone --depth 3 git://some/repo myshallowcopyrepo

গিট-এসএনএন-এর জন্য কি একই রকম বিকল্প রয়েছে?

আমার আবিষ্কার এখন পর্যন্ত

এখনও অবধি আমি কেবল সেই -rNবিকল্পটি খুঁজে পেয়েছি যেখানে Nটানতে সংশোধন করতে হবে। উদাহরণ:

git svn clone -rN svn://some/repo

ডকুমেন্টেশন অনুসারে ব্যবহারের সম্ভাবনা রয়েছে -r$REVNUMBER:HEAD। আমি সর্বশেষ 3 টি সংশোধনগুলি পাওয়ার জন্য নিম্নলিখিতটি চেষ্টা করেছিলাম যা একটি ত্রুটি বার্তা পেয়েছিল।

$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn

সুতরাং আমি HEAD~3তৃতীয় কিন্তু শেষ সংশোধনী 534 এর প্রকৃত সংখ্যাটি দিয়ে প্রতিস্থাপন করেছি That এটি কাজ করেছে, তবে তার জন্য আমাকে তৃতীয় কিন্তু শেষ প্রতিশ্রুতিটির সংশোধন সংখ্যাটি বের করতে হবে।

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

নথিপত্র

Git-ক্লোন

Git-SVN


6
আমার নিজের প্রশ্নের উত্তর দেওয়া: -s is for --stdlayout which presumes the svn recommended layout for tags, trunk, and branches.(তবে আমার পক্ষে কাজ করেনি)
সেবাস্তিয়ান গ্রিগনোলি

কত কঠিন বাস্তবায়ন হবে --depthজন্য git svn, যেহেতু সমর্থন ইতিমধ্যে রয়েছে। এবং এটি ইতিমধ্যে সার্ভার থেকে সর্বশেষ রেভ খুঁজে বের করতে হবে?
পিটার কর্ডেস

উত্তর:


238

আপনি ইতিমধ্যে গিট-এসভিএন-তে অগভীর ক্লোন নির্দিষ্ট করার সহজ উপায়টি আবিষ্কার করেছেন যে আপনি ( -r$REV:HEAD) এ আপনার ক্লোনটি শুরু করতে চান এমন এসভিএন সংশোধন নম্বর উল্লেখ করে ।

উদাহরণ স্বরূপ: git svn clone -s -r1450:HEAD some/svn/repo

গিটের ডেটা স্ট্রাকচারটি নির্দেশিত অ্যাসাইক্লিক গ্রাফের (ডিএজি) পয়েন্টারগুলির উপর ভিত্তি করে তৈরি করা হয়, যা কমিটিকে হাঁটতে তুচ্ছ করে তোলে n। তবে এসভিএন (এবং সেইজন্য গিট-এসভিএন) তে আপনাকে নিজেই পুনর্বিবেচনা নম্বরটি সন্ধান করতে হবে।


5
আমি যদি ভবিষ্যতে পূর্ববর্তী সংশোধনটির ক্লোনিং চালিয়ে যেতে চাই তবে কী এটি সম্ভব?
জেনিচিমারো

5
@ জেনিচিমাড়ো: আপনি git-svnএকই জায়গায় অন্য একটি দূরবর্তী পয়েন্ট যুক্ত করে এবং git-svn fetchগাছের আরও বেশি জিনিস ব্যবহার করে এটি করতে পারেন। সেই মুহূর্তে আপনাকে git filter-branchডান শাখায় পুরানো (আংশিক) গাছটি পুনর্বার করতে হবে।
বেন জ্যাকসন

পল আমার গীত (থেকে SVN থেকে ক্রমবর্ধমান মাইগ্রেশন সম্পাদন দ্বারা সাম্প্রতিক সংস্করণের অন্তর্ভুক্ত পেতে জন্য কোন উপায় আছে কি stackoverflow.com/questions/29161646/... )
SabareeshSS

1
এসভিএন সংশোধনগুলি সনাক্ত করতে একটানা পূর্ণসংখ্যার ব্যবহার nকরে,
কমিটগুলি

আমার মনে হয় -r এর পরেও একটি জায়গা নেই। যেমন গিট এসএনএন ক্লোন -আর 1133: কিছু শিরোনাম / এসএনএন / রেপো
জ্ঞান

92

আমি আমাদের বিশাল সাবভার্সন ট্রি থেকে সীমিত সংখ্যক সংশোধনী পাওয়ার জন্য নিজেকে নিম্নলিখিত ব্যবহার করে দেখতে পাই (আমরা শীঘ্রই এসএনএন রিভিশন 35000 এ পৌঁছে যাচ্ছি)।

# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision 'N'
cd some-branch
git svn rebase

এবং কোন শাখাটি কোথায় শুরু হয়েছিল তা খুঁজে বের করার একটি ভাল উপায় হ'ল svn logএটি করা এবং শাখায় প্রথমটি খুঁজে পাওয়া (শেষ করার পরে তালিকাবদ্ধ হওয়া):

svn log --stop-on-copy svn://some/repo/branch/some-branch

এখনও পর্যন্ত আমি সমস্ত শাখা ট্র্যাক করার ক্ষেত্রে এটির মতো ঝামেলা সত্যিই খুঁজে পাইনি। এটি ক্লোন করতে অনেক বেশি সময় নেয় এবং এসএনএন এবং গিট আমার পছন্দ মতো একসাথে কাজ করে না। আমি প্যাচ ফাইলগুলি তৈরি করতে এবং সেগুলিকে অন্য এসএনএন শাখার গিট ক্লোনটিতে প্রয়োগ করার ঝোঁক রাখি।


1
আমার কাছ থেকে +1 - 128 ইস্যুতে আমি একটি সম্পূর্ণ এসএনএন রেপো ক্লোন করে যাচ্ছিলাম
ইয়ান অক্সলে

এসএনএন লগ কমান্ডটি ঠিক আমি যা খুঁজছিলাম! ধন্যবাদ
mrbrdo

1
আমি যে রেপোসের সাথে কাজ করি তার সাথে মানহীন শাখা এবং লেআউট থাকে, তাই আমি সাধারণত প্রতিটি এসভিএন শাখার জন্য স্থানীয় গিট রেপো তৈরি করি এবং তারপরে cherry-pick/ rebaseসেগুলির মধ্যে। কমিট অতিরিক্ত পদক্ষেপ নেয় ( pushতারপরে dcommitরিমোট রেপো থেকে) তবে আমি মনে করি এটি ট্রেড অফের পক্ষে মূল্যবান।
ক্রোনস্পান

সে সম্পর্কে ভেবে
দেখেনি,

33

... 7 বছর পরে, মরুভূমিতে, একটি কাঁপুনি দিয়ে বয়ে গেছে ...

আমি গৃহীত উত্তরের সাথে সন্তুষ্ট ছিলাম না তাই গিথুব উপলভ্য আপনার জন্য এটি করার জন্য আমি কিছু স্ক্রিপ্ট তৈরি করেছি । এগুলি যে কেউ ব্যবহার করতে চায় git svn cloneতবে পুরো সংগ্রহস্থলটি ক্লোন করতে চায় না এবং ইতিহাসের মাঝামাঝি থেকে কোনও নির্দিষ্ট সংশোধন অনুসন্ধান করতে চায় না এমন ব্যক্তিকে সহায়তা করা উচিত (সম্ভবত আপনি একগুচ্ছ রেপো ক্লোনিং করছেন)) এখানে আমরা কেবলমাত্র শেষ এন সংশোধনগুলি ক্লোন করতে পারি:

git svn cloneসর্বশেষ 50 টি সংশোধন ক্লোন করতে ব্যবহার করুন

# -u    The SVN URL to clone
# -l    The limit of revisions
# -o    The output directory

./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt

কোনও এসভিএন রেপো থেকে পূর্ববর্তী এন সংশোধন সন্ধান করুন

# -u    The SVN URL to clone
# -l    The limit of revisions

./svn-lookback.sh -u https://server/project/trunk -l 5     

এটি একটি ক্র্যাক দেবে, আমাদের রেপোতে প্রায় ১ 170০,০০০ রিভিশন রয়েছে এবং এটি একটি একক প্রকল্প করতে আরও দীর্ঘ সময় নিচ্ছে এবং রেপোতে আমার 10 টিরও বেশি নির্দিষ্ট প্রকল্প রয়েছে: | কেবলমাত্র 3-4 বছরের ইতিহাস করা বিবেচনা করে।
VeenarM

1
এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ!
কাই মেখেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.