একটি "গিট রফতানি" (যেমন "এসএনএন এক্সপোর্ট") করবেন?


2356

আমি ভাবছিলাম যে কোনও ভাল "গিট রফতানি" সমাধান রয়েছে কিনা যা .gitসংগ্রহস্থল ডিরেক্টরি ছাড়া গাছের একটি অনুলিপি তৈরি করে । আমি জানি কমপক্ষে তিনটি পদ্ধতি:

  1. git clone.gitসংগ্রহস্থল ডিরেক্টরি মুছে ফেলার পরে ।
  2. git checkout-index এই কার্যকারিতাটির প্রতি ইঙ্গিত দেয় কিন্তু "সূচকগুলিতে কেবল পছন্দসই গাছটি পড়ুন ..." দিয়ে শুরু হয় যা আমি কীভাবে করব তা পুরোপুরি নিশ্চিত নই।
  3. git-exportএকটি তৃতীয় পক্ষের স্ক্রিপ্ট যা মূলত git cloneএকটি অস্থায়ী অবস্থানের পরে rsync --exclude='.git'চূড়ান্ত গন্তব্যস্থলে প্রবেশ করে।

এই সমাধানগুলির কোনওই আমাকে সন্তোষজনক বলে মনে করে না। নিকটতম একটির svn exportবিকল্প হতে পারে বিকল্প 1, কারণ উভয়ই প্রথমে লক্ষ্য ডিরেক্টরিটি খালি থাকা দরকার। তবে বিকল্প 2 আরও ভাল বলে মনে হচ্ছে, আমি সূচীতে একটি গাছ পড়ার অর্থ কী তা বুঝতে পারি ass


1
@ আরএনআরটম: সোমভের উত্তর দেখুন। (তারার সংরক্ষণাগারে কোনও "সঙ্কুচিত" কিছুই নেই)।
12 এটারিওন

23
@ এমআরটম git archive --format zip --output "output.zip" master -0আপনাকে একটি সঙ্কুচিত সংরক্ষণাগার দেবে (-0 সংকোচনের জন্য পতাকা)। git-scm.com/docs/git-archive

7
আমি @ এমআরটমকে সম্মতি জানাই এবং সংরক্ষণাগারটি সংকুচিত বা সঙ্কুচিত কিনা তা আমি মনে করি না। এসভিএন এর সাহায্যে আমি exportপ্রত্যন্ত সংগ্রহস্থল থেকে সরাসরি 250 কেবি সাব-ডাইরেক্টরি করতে পারি (যা অন্যথায় 200 এমবি আকার হতে পারে, সংশোধন বাদে) - এবং আমি কেবল 250 কেবি (বা তাই) ডাউনলোড ট্রান্সফারের জন্য নেটওয়ার্কটিতে আঘাত করব। সহ git, archiveসার্ভারে সক্ষম করতে হবে (তাই আমি এটি চেষ্টা করতে পারি না) - clone --depth 1সার্ভার থেকে এখনও 25 এমবি বলার একটি রেপো পেতে পারে, যেখানে .gitসাবফোল্ডারটি একা 15MB নেয়। সুতরাং, আমি এখনও উত্তরটি "না" বলতে চাই say
sdaau

@mrTom উত্তর আসলে হ্যাঁ ওপি এর উত্তর দেখুন - কমান্ডgit checkout-index
nocache

এখানে একটি দুর্দান্ত এবং সহজ উপায়:git archive -o latest.zip HEAD
এভেজেনি সার্জিভ

উত্তর:


2396

সম্ভবত এটি অর্জনের সবচেয়ে সহজ উপায়টি হ'ল git archive। আপনার যদি সত্যিই কেবল প্রসারিত গাছের প্রয়োজন হয় তবে আপনি এটির মতো কিছু করতে পারেন।

git archive master | tar -x -C /somewhere/else

আমার বেশিরভাগ সময় গিট থেকে কিছু 'রফতানি' করা দরকার, আমি যে কোনও ক্ষেত্রে একটি সংকুচিত সংরক্ষণাগার চাই, তাই আমি এরকম কিছু করি।

git archive master | bzip2 >source-tree.tar.bz2

জিপ সংরক্ষণাগার:

git archive --format zip --output /full/path/to/zipfile.zip master 

git help archive আরও তথ্যের জন্য, এটি বেশ নমনীয়।


সচেতন থাকুন যদিও সংরক্ষণাগারটিতে .git ডিরেক্টরি অন্তর্ভুক্ত থাকবে না, তবে এটিতে অন্যান্য লুকানো গিট-নির্দিষ্ট ফাইল যেমন .gitignore, .gitattributes ইত্যাদি থাকবে If আপনি যদি সংরক্ষণাগারে না চান তবে নিশ্চিত হয়ে নিন যে আপনি .gitattributes ফাইলে রফতান-উপেক্ষা বৈশিষ্ট্যটি ব্যবহার করুন এবং আপনার সংরক্ষণাগারটি করার আগে এটি প্রতিশ্রুতিবদ্ধ। আরও পড়ুন ...


দ্রষ্টব্য: আপনি যদি সূচক রফতানি করতে আগ্রহী হন, আদেশটি হ'ল

git checkout-index -a -f --prefix=/destination/path/

( আরও তথ্যের জন্য গ্রেগের উত্তর দেখুন)


198
জিপ সংরক্ষণাগার:git archive --format zip --output /full/path master
ভাদিম

221
সংরক্ষণাগারটিতে .git ডিরেক্টরি অন্তর্ভুক্ত থাকবে না, তবে .gitignore, .gitattributes ইত্যাদি like একটি .gitattributes ফাইল এবং আপনার সংরক্ষণাগারটি করার আগে এটি প্রতিশ্রুতিবদ্ধ। দেখুন feeding.cloud.geek.nz/2010/02/...
mj1531

54
স্ট্রিমসের নোট অনুসরণ করতে: আপনি জিপটির ভিতরে থাকা ডিরেক্টরিটির নামটি নিয়ন্ত্রণ করতে কমান্ডটিতে একটি '--prefix = কিছু /' স্ট্রিং যুক্ত করতে পারেন। উদাহরণস্বরূপ, আপনি যদি git archive --format zip --output /path/to/file.zip --prefix=newdir/ masterআউটপুট ব্যবহার করেন তবে তাকে 'ফাইল.জিপ' বলা হবে তবে আপনি যখন এটি আনপ্যাক করবেন তখন উপরের স্তরের ডিরেক্টরিটি হবে 'নতুনদির'। (যদি আপনি --প্রেফিক্স বৈশিষ্ট্যটি বাদ দেন তবে শীর্ষ স্তরের দির 'ফাইল' হবে।)
অ্যালান ডাব্লু স্মিথ

89
সবচেয়ে সহজ উপায়: git archive -o latest.zip HEADএটি একটি জিপ সংরক্ষণাগার তৈরি করে যাতে বর্তমান শাখায় সর্বশেষ প্রতিশ্রুতিবদ্ধ সামগ্রী রয়েছে। নোট করুন আউটপুট ফর্ম্যাটটি আউটপুট ফাইলের এক্সটেনশান দ্বারা অনুমান করা হয়।
nacho4d

37
এটি গিট
সাবমডিউলগুলি

320

বিকল্প 2 এর অর্থ কী তা আমি খুঁজে পেয়েছি। একটি সংগ্রহস্থল থেকে, আপনি এটি করতে পারেন:

git checkout-index -a -f --prefix=/destination/path/

পাথের শেষে স্ল্যাশ গুরুত্বপূর্ণ, অন্যথায় এটি 'গথ' এর উপসর্গ সহ ফাইলগুলি / গন্তব্যস্থলে থাকবে।

যেহেতু একটি সাধারণ পরিস্থিতিতে সূচীতে ভান্ডারগুলির বিষয়বস্তু থাকে, তাই "সূচকে পছন্দসই গাছটি পড়ার" জন্য বিশেষ কিছু করার দরকার নেই। এটি ইতিমধ্যে আছে।

এই -aসূচীতে সমস্ত ফাইল যাচাই করার জন্য পতাকাটির প্রয়োজনীয়তা রয়েছে (এই পরিস্থিতিতে এই পতাকাটি বাদ দেওয়ার অর্থ কী তা আমি নিশ্চিত নই, যেহেতু এটি আমার যা ইচ্ছা তা করে না)। -fপতাকা বাহিনীর আউটপুট, যা এই কমান্ড স্বাভাবিকভাবে করে না কোনো বিদ্যমান ফাইল মুছে যাওয়ার।

এটি যে "গিট রফতানির" সন্ধান ছিল আমি এটি সাজিয়েছি।


73
... এবং শেষে SLASH ভুলবেন না, অথবা আপনি আকাঙ্ক্ষিত ফল হবে না;)
কনিকে

1
git addকমান্ড সূচক, তাই যাই হোক না কেন বিষয়বস্তু পরিবর্তন git statusশো হিসাবে "প্রতিশ্রুতিবদ্ধ হতে" হয় পার্থক্য মাথা এবং সূচক বিষয়বস্তুর মধ্যে।
গ্রেগ হিউগিল

7
@ কনি: আপনার মন্তব্য পড়ুন, এটি সম্পর্কে ভুলে গিয়ে কোনও পিছনে ছাড়াই কমান্ডটি চালান। টিপ:
কানির

35
কনইয়ের পরামর্শে +1 করুন। এছাড়াও, '~ / গন্তব্য /' তৈরি করার চেষ্টা করবেন না, কারণ এটি আপনার কার্যনির্বাহী ডিরেক্টরিতে '~' নামে একটি ডিরেক্টরি তৈরি করে, যা আপনি সত্যই চেয়েছিলেন than অনুমান করুন যখন আপনি
নির্বোধভাবে

5
@ কাইলহিরনিমাস - 'dest / গন্তব্য / using' ব্যবহার সম্পর্কে আপনার সতর্কতা সত্য যদি আপনি নিজের উপসর্গের চারপাশে উদ্ধৃতি ব্যবহার করেন যা শেলকে টিল্ড সম্প্রসারণ না করতে বলে। আপনার কার্যনির্বাহী ডায়ারে একটি ডায়ার তৈরি হবে ~(না '~'!) git checkout-indexএই বিষয়ে বিশেষ কিছু নেই : একই কথা mkdir '~/dest'(এটি করবেন না! )। ফাইলের নামগুলি এড়ানো যাওয়ার আরও একটি ভাল কারণ যা উদ্ধৃত করা প্রয়োজন (যেমন তাদের মধ্যে একটি জায়গা রয়েছে) :-)
ম্যাট ওয়ালিস

254

git archive দূরবর্তী সংগ্রহস্থলগুলির সাথেও কাজ করে।

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master | tar -xf -

রেপোর অভ্যন্তরে নির্দিষ্ট পাথ রফতানি করতে আপনি গিটের সর্বশেষ যুক্তি হিসাবে যতগুলি পাথ যুক্ত করতে পারেন যেমন:

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master path1/ path2/ | tar -xv

6
এইটি আমার পক্ষে সবচেয়ে ভাল বিকল্প best এটির অতিরিক্ত সুবিধা রয়েছে যে এটি খালি সংগ্রহস্থলগুলিতেও কাজ করে।
ইন্নাম

5
আমি উন্নত সংস্করণটি হ'ল: git archive --format=tar --prefix=PROJECT_NAME/ --remote=USER@SERVER:PROJECT_NAME.git master | tar -xf - (আপনার সংরক্ষণাগারটি কোনও ফোল্ডারে রয়েছে তা নিশ্চিত করে)
নিক

7
দ্রষ্টব্য : সার্ভারকে অবশ্যই এই বৈশিষ্ট্যটি সক্ষম করতে হবে।
জাকুব নরবস্কি

12
আমি চেষ্টা করেছি: git archive --format=zip --output foo.zip --remote=https://github.com/xxx.git masterএবং মারাত্মক হয়ে উঠলাম: প্রোটোকল দ্বারা অপারেশন সমর্থন করে না। কমান্ড প্রবাহের অপ্রত্যাশিত সমাপ্তি।
andyf

7
@ অ্যান্ডিফ গিটহাবের নিজস্ব উপায় রয়েছে: curl -L https://api.github.com/repos/VENDOR/PROJECT/tarball | tar xzf -প্রতি দস্তাবেজ
বিশপ

62

এখানে চিত্র বর্ণনা লিখুন

গিটিহাবে যদি সংগ্রহস্থলটি হোস্ট করা হয় তবে একটি বিশেষ কেসের উত্তর।

শুধু ব্যবহার svn export

যতদূর জানি গিথুব অনুমতি দেয় না archive --remote। যদিও গিটহাবটি এসএনএন সামঞ্জস্যপূর্ণ এবং তাদের কাছে সমস্ত গিট রেপো svnঅ্যাক্সেসযোগ্য রয়েছে যাতে আপনি svn exportআপনার গিটহাব ইউআরএলটিতে কিছুটা সমন্বয় করে সাধারণত আপনার মতো ব্যবহার করতে পারেন।

উদাহরণস্বরূপ একটি সম্পূর্ণ সংগ্রহস্থল রফতানি করার জন্য, trunkURL- এ কীভাবে প্রতিস্থাপন করা হয় তা লক্ষ্য করুন master(বা যে কোনও প্রকল্পের হেড শাখা সেট করা আছে ):

svn export https://github.com/username/repo-name/trunk/

এবং আপনি একটি একক ফাইল বা একটি নির্দিষ্ট পাথ বা ফোল্ডার রফতানি করতে পারেন:

svn export https://github.com/username/repo-name/trunk/src/lib/folder

JQuery জাভাস্ক্রিপ্ট লাইব্রেরি সহ উদাহরণ

HEADশাখা বা মাস্টার শাখা প্রাপ্তিসাধ্য ব্যবহার করা হবে trunk:

svn ls https://github.com/jquery/jquery/trunk

অ- HEAD শাখাগুলি এর অধীনে অ্যাক্সেসযোগ্য হবে /branches/:

svn ls https://github.com/jquery/jquery/branches/2.1-stable

সকল ট্যাগ অধীনে /tags/একই ফ্যাশন:

svn ls https://github.com/jquery/jquery/tags/2.1.3

1
git archiveগিটহাবের সাথে ঠিকঠাক কাজ করে, যতক্ষণ আপনি গিট প্রোটোকল ব্যবহার করেন ততক্ষণ ইউআরএল https://দিয়ে প্রতিস্থাপন করুন git://। আমি জানি না কেন গিটহাব এই লুকানো বৈশিষ্ট্যটির বিজ্ঞাপন দেয় না।
নীল মেহেহে

1
@ নীলমাইহে এটি আমার পক্ষে কাজ করে না, আমি পেয়েছি fatal: The remote end hung up unexpectedly। JQuery গিথুব রেপো সহ দুটি ভিন্ন সার্ভারে চেষ্টা করা।
অ্যান্টনি হাটজোপল্লো

তুমি ঠিক বলছো. আমি ভুলে গিয়েছিলাম যে আমি ব্যবহার করছিলামgit config url.<base>.insteadOf দূরবর্তী সংগ্রহস্থলটি ক্যাশে করতে করছি। তাই আমি file://বাস্তবে একটি ইউআরএল ব্যবহার করছিলাম । আমি সন্দেহ করি যে এটি ইউআরএলগুলির git archiveসাথে কাজ git://করতে পারে যেহেতু এটি git-upload-archiveদূরবর্তী প্রান্তে চালাতে সক্ষম হওয়া প্রয়োজন needs sshপ্রোটোকলটি ব্যবহার করে এটি সম্ভব হওয়া উচিত , গিথুব এটি ( Invalid command: 'git-upload-archive') অনুমতি দেয় না except
নিল মেহেহে

আমি যদি অভ্যন্তরীণভাবে হোস্ট করা গিট সংগ্রহস্থলগুলিতে এটি করতে চাই তবে গিথুবের মতো আচরণ করে এমন কোনও স্থানীয় সার্ভার সরঞ্জাম ব্যবহার করার কোনও উপায়?
ক্রিস

1
আপভোটেড - এটি সম্পূর্ণ উদ্ভট যে গিটের এই বৈশিষ্ট্যটি নেই এবং আমাদের এসএনএন অবলম্বন করতে হবে
জেসন এস

40

থেকে গীত ম্যানুয়াল :

"একটি সম্পূর্ণ গাছ রফতানি করতে" গিট-চেকআউট-সূচক ব্যবহার করে

উপসর্গ ক্ষমতাটি মূলত গিট-চেকআউট-ইনডেক্সকে "গাছ হিসাবে রফতানি" ফাংশন হিসাবে ব্যবহার করা তুচ্ছ করে তোলে। কেবলমাত্র সূচিতে পছন্দসই গাছটি পড়ুন এবং করুন:

$ git checkout-index --prefix=git-export-dir/ -a


19
আমি মনে করি বিভ্রান্তিটি "সূচকে পছন্দসই গাছটি পড়ুন" এই বাক্যটি।
davetron5000

4
আপনি যদি শাখা বারে ডিরেক্টরি foo রফতানি করতে চান, তবে এটি হবে git read-tree bar:fooএবং তার git checkout-index --prefix=export_dir/ -aপরে সম্ভবত আপনার করা উচিতgit update-index master
পাস্কাল রোসিন

1
@ জোহান ওয়েলডন আপনার কি প্রথমে রেপো ক্লোন করা প্রয়োজন? যদি তা হয় তবে আমি তা গ্রহণ করব না, যেহেতু একটি উপ-ডিরেক্টরিটির "এসএনএন এক্সপোর্ট" এর পুরো পয়েন্টটি সরাসরি সেই উপ-ডিরেক্টরিটির একটি অনুলিপি পাওয়া যায়; কারও কাছে যদি 1 জিবি গিট রেপো থাকে এবং আমি চাই 10 কেবি সাব-ডাইরেক্টরিটি হয় তবে আমার পুরো জিনিসটি ক্লোন করার প্রয়োজন হয় না।
জেসন এস

3
এছাড়াও আমি "ডেভেট্রন ৫০০০" "ইন্ডেক্সের মধ্যে পছন্দসই গাছটি পড়ুন" মন্তব্যটি দিয়ে প্রতিধ্বনিত হলাম যার অর্থ কী তা আমার কোনও ধারণা নেই।
জেসন এস

38

আমি চারপাশে একটি সাধারণ মোড়ক লিখে রেখেছি git-checkout-indexযা আপনি এটির মতো ব্যবহার করতে পারেন:

git export ~/the/destination/dir

গন্তব্য ডিরেক্টরি ইতিমধ্যে বিদ্যমান থাকলে, আপনাকে যুক্ত করতে হবে -fবা --force

ইনস্টলেশন সহজ; স্ক্রিপ্টটি কেবল আপনার কোথাও রেখে দিন এবং PATHনিশ্চিত করুন যে এটি কার্যকর হয়েছে।

গিথুব সংগ্রহস্থলের জন্য git-export


15
এই মোড়কটি প্ল্যাটফর্ম-অজোনস্টিক নয়; এটি নির্ভর করে / বিন / শ। সুতরাং আপনি যদি উইন্ডোজে থাকেন তবে এই সমাধানটি সম্ভবত আপনার পক্ষে কাজ করবে না।
শোভাভনিক

18
উহ, এই লিপিটি হ'ল ডকুমেন্টেশন, হোয়াইটস্পেস, সেটআপ, আর্গুমেন্ট পার্সিংয়ের 57 টি লাইন এবং কেবলমাত্র একটি লাইন যা আসলে কিছু করে ...
ভ্লাদিমির পানতেলিভ

36

এটি SVN এর তুলনায় গিটের সাথে ইস্যু কম বলে মনে হচ্ছে। গিট কেবলমাত্র সংগ্রহস্থলগুলিতে একটি .git ফোল্ডার রাখে, যেখানে এসভিএন প্রতিটি উপ-ডিরেক্টরিতে একটি .svn ফোল্ডার রাখে। সুতরাং "এসএনএন এক্সপোর্ট" পুনরাবৃত্ত কমান্ড-লাইন যাদুটিকে এড়িয়ে চলে, যদিও গিটের সাথে পুনরাবৃত্তি প্রয়োজন হয় না।


26
এসভিএন 1.7 হিসাবে, কেবলমাত্র একটি .svn ফোল্ডার রয়েছে: subversion.apache.org/docs/release-notes/1.7.html#single-db
kostmo

এটি এসএনএন রফতানি মোছা এমন কোনও অতিরিক্ত বিল্ড ফাইল থেকে মুক্তি পাবে না। সুতরাং এটি অবশ্যই উত্তর নয়।
ygoe

28

এর সমতুল্য

svn export . otherpath

একটি বিদ্যমান রেপোর ভিতরে

git archive branchname | (cd otherpath; tar x)

এর সমতুল্য

svn export url otherpath

হয়

git archive --remote=url branchname | (cd otherpath; tar x)

1
ধন্যবাদ, আমি যা হারিয়েছিলাম তা ছিল ... এছাড়াও, রফতানির টাইমস্ট্যাম্পগুলি পরীক্ষা করার জন্য (সেগুলি ফাইলগুলিতে সংরক্ষণ করা হবে না), ব্যবহার করুন git archive --format=tar --prefix=junk/ HEAD | (tar -t -v --full-time -f -)... তবে, টাইমস্ট্যাম্পগুলি সংরক্ষণাগারটি একেবারে তুচ্ছ নয়, তাই আমি একটি পোস্ট করেছি নীচে উদাহরণ
sdaau

1
আপনি এই সাবসেলের পরিবর্তে টারের জন্য সি বিকল্পটি ব্যবহার করতে পারেন: git archive branchname | tar xC otherpath
জেমস মুর

শীর্ষস্থানীয় যে Cটার্নের বিকল্পটি কেবল জিএনইউ টার।
aredridel

22

আপনি যদি ফাইলগুলি বাদ না দিয়ে থাকেন .gitattributes export-ignoreতবে চেষ্টা করুনgit checkout

mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout -f -q

-f
সূচক থেকে পাথগুলি পরীক্ষা করার সময়, নিমজ্জিত এন্ট্রিগুলিতে ব্যর্থ হবেন না; পরিবর্তে, নিমজ্জিত এন্ট্রি উপেক্ষা করা হয়।

এবং

ভার্চুয়াল
এড়ানো

অতিরিক্ত হিসাবে আপনি যে কোনও শাখা বা ট্যাগ পেতে পারেন বা কোনও এসভিএন এর মতো একটি নির্দিষ্ট কমিট রিভিশন পেতে পারেন কেবলমাত্র এসএএএন 1 যুক্ত করুন (গিটে এসএইচএ 1 এসভিএন-এ সংশোধন সংখ্যার সমতুল্য)

mkdir /path/to/checkout/
git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout 2ef2e1f2de5f3d4f5e87df7d8 -f -q -- ./

/path/to/checkout/খালি হতে হবে, গীত যেকোনো ফাইল মুছে যাবে না, কিন্তু কোনো সতর্কবাণী ছাড়াই একই নামের ফাইল মুছে যাবে

আপডেট: শিরশ্ছেদযুক্ত সমস্যা এড়াতে বা ট্যাগ, শাখা বা SHA1 এর সাথে রফতানির জন্য চেকআউট ব্যবহার করার সময় ওয়ার্কিং রিপোজিটরিটি অক্ষত রেখে দেওয়ার জন্য, আপনাকে -- ./শেষে যুক্ত করতে হবে

ডাবল ড্যাশ --গিটকে বলে যে ড্যাশগুলির পরে সমস্ত কিছুই পাথ বা ফাইল এবং এই ক্ষেত্রেও git checkoutপরিবর্তনটি পরিবর্তন না করতে বলেHEAD

উদাহরণ:

এই কমান্ডটি কেবলমাত্র libs ডিরেক্টরি এবং readme.txtঠিক সেই প্রতিশ্রুতি থেকে ফাইল পাবে

git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout fef2e1f2de5f3d4f5e87df7d8 -f -q -- ./libs ./docs/readme.txt

এটি my_file_2_behind_HEAD.txtমাথার পিছনে দুটি কমিট তৈরি (ওভাররাইট) তৈরি করবেHEAD^2

git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout HEAD^2 -f -q -- ./my_file_2_behind_HEAD.txt

অন্য একটি শাখার রফতানি পেতে

git --git-dir=/path/to/repo/.git --work-tree=/path/to/checkout/ checkout myotherbranch -f -q -- ./

লক্ষ্য করুন যে ./এটি সংগ্রহস্থলের মূলের সাথে সম্পর্কিত


প্রকৃতপক্ষে, অন্য অনেকগুলি এবং আপভোটের মধ্যে, এটি আমার জন্য সবচেয়ে ভাল কাজ করেছে, কোনও সংকোচন ছাড়াই, খালি সংগ্রহস্থল (গিটোলাইট) দিয়ে সূক্ষ্ম কাজ করেছে।
তাকেশিন

1
লক্ষ্য করুন যে SHA1
চেকআউটটি

বাস্তবে @ আইটিগ্যাবস, এটি ".git" ফোল্ডারটি ডাউনলোড করে না। সুতরাং ডাউনলোড করা ফোল্ডারটি গিট রিপোজিটরি নয়, সুতরাং এটি প্রযুক্তিগতভাবে "শিরশ্ছেদ করা হয় না"
ফ্যাবিও মাররেকো

@ ফ্যাবিওমারেকো শিরোনাম ইস্যুটি রফতানীতে রয়েছে রফতানি করা / ডাউনলোড করা ফাইলগুলিতে নয়, আমি আরও তথ্যের জন্য উত্তরটি আপডেট করছি
user5286776117878

3
এটি আমার জন্য কাজ করে মহান। তবে প্রথমে আমি "গিট রিপোজিটরি নয়" ত্রুটি বার্তা পেয়েছি। তারপরে আমি দেখতে পেলাম যে "/ path / to / repo /" কে .git ফোল্ডারে নির্দেশ করতে হয়েছিল। সুতরাং এটি কাজ করেছে: --git-dir = / पथ / থেকে / রেপো / .git
ফিলবার্ক

21

আমি গিট-সাবমডিউলগুলি ব্যাপকভাবে ব্যবহার করি। এটি আমার জন্য কাজ করে:

rsync -a ./FROM/ ./TO --exclude='.*'

1
যার নামগুলি কোনও বিন্দু দিয়ে শুরু হবে তা কি মিস করবে না .htaccess?
গ্রেগ হিউগিল

8
একটি ভাল সমাধান, আমি --excolve = '। *' থেকে --excolve = '। গিট *'
স্কামুন্ক

18
--exclude-VCS আপনি এই বিচক্ষণতা নিতে যাচ্ছে সেটা যদি
ঢিকিয়ে ঢিকিয়ে চলা

./FROM/ একটি দূরবর্তী রেপো হতে পারে?
ডিজাইনটির

2
এফওয়াইআই হিসাবে, আমার অনুলিপিটি rsyncযুক্তিটি তালিকাভুক্ত করে --cvs-exclude। অতিরিক্ত হিসাবে, এটি এখনও অনুলিপি করে .gitattributesএবং.gitignore
রায়ান র্যানসফোর্ড

19

গিট সংগ্রহস্থল রফতানি করার উপায় খুঁজতে গিয়ে আমি এই পৃষ্ঠায় ঘন ঘন হিট করেছি। এই প্রশ্নের আমার উত্তরটি গিটের তুলনায় ডিজাইন করে এসএনএন রপ্তানির তিনটি বৈশিষ্ট্য বিবেচনা করে, যেহেতু এসএনএন একটি কেন্দ্রীভূত সংগ্রহস্থল পদ্ধতির অনুসরণ করে:

  • এটি সমস্ত সংশোধন রফতানি না করে দূরবর্তী সংগ্রহস্থলে ট্র্যাফিক হ্রাস করে
  • এটি রপ্তানি ডিরেক্টরিতে মেটা তথ্য অন্তর্ভুক্ত করে না
  • এসএনএন ব্যবহার করে একটি নির্দিষ্ট শাখা রফতানি করা উপযুক্ত পাথ নির্দিষ্ট করেই সম্পন্ন হয়

    git clone --depth 1 --branch master git://git.somewhere destination_path
    rm -rf destination_path/.git
    

যখন একটি নির্দিষ্ট মুক্তি বিল্ডিং এটা উদাহরণ হিসেবে একটি স্থিতিশীল শাখা ক্লোন করতে হয় --branch stableবা --branch release/0.9


গন্তব্য উপস্থিত থাকলে এবং খালি না থাকলে এটি কাজ করে না।
এপিমনাম

2
এক সত্য উত্তর: এটি গভীরতা থেকে উত্থিত। git archive | tarপদ্ধতির POSIX-বেমানান শেল পরিবেশের (যেমন, AppVeyor এর CMD- বা PowerShell ভিত্তিক সি আই), যা অ আদর্শ এটি বেমানান নয়। দ্যgit checkoutপদ্ধতির প্রধান কাজ গাছ, যা ভয়াবহ সূচী পরিবর্তন। git checkout-indexপদ্ধতির প্রধান কাজ গাছ পূর্বেই পরিবর্তন করা, যা এমনকি ভয়াবহ-Er হয় সূচক প্রয়োজন। ঐতিহ্যগত git cloneপদ্ধতির যে ইতিহাস, যা অযথা হয় মোছার আগে সংগ্রহস্থলের ইতিহাসের সম্পূর্ণতা ক্লোনস। এটিই একমাত্র বুদ্ধিমান সমাধান।
সিসিল কারি

1
স্থানীয়ভাবে রফতানি করার জন্য, নোট করুন যে গিট কার্যকারী গাছের ক্লোন করতে হবে তার পরম পথটি file://প্রোটোকল (যেমন, git clone --depth 1 --branch v3.14.15 file:///home/me/src_repo trg_repo) দ্বারা উপসর্গ করা উচিত । এটি করতে ব্যর্থ হলে "warning: --depth is ignored in local clones; use file:// instead."অগভীর ক্লোনার চেয়ে এই মানটির নির্গমন হবে এবং এই উত্তরের পুরো উদ্দেশ্যকে পরাস্ত করবে perform Salud!
সিসিল কারি

16

এটি সমস্ত বিষয়বস্তু অনুলিপি করবে। আমি গিট ক্লোনড প্রকল্পগুলি .git স্টাফ ছাড়াই আমার ওয়েব অ্যাপের গিট রেপোতে রফতানি করতে ব্যবহার করি।

সিপি -আর ./path-to-git-repo / পাথ / থেকে / গন্তব্য /

সরল পুরানো বাশ কেবল দুর্দান্ত কাজ করে :)


শুধু রিমোটে ধাক্কা দেবে না কেন? বাশ এমনকি সহজ।
নুরেটিন

2
ওয়েব অ্যাপ্লিকেশনগুলির অংশ হিসাবে যুক্ত ফাইলগুলির নাম কী এবং এর নাম ডট দিয়ে শুরু হয়? :) .htaccess সম্পর্কে ভাবেন
আর্তুর

3
কখনও কখনও আপনি যা আছে তা উপেক্ষা করতে চান .gitignore, এটি হবে না।
ফ্রিজ্যান্ট

14

ক্লোন হিসাবে সহজ তারপর .git ফোল্ডার মুছুন:

git clone url_of_your_repo path_to_export && rm -rf path_to_export/.git


4
সত্যিই - এই উত্তর, যা প্রশ্নের মধ্যে 1 # - আপনি যা করতে যাচ্ছেন 99% সময় যাচ্ছেন তা। এই উত্তরগুলির বেশিরভাগ হ'ল উন্মাদভাবে আবদ্ধ।
জেফ নিক্সন 14 'এ

11

গিটহাব ব্যবহারকারীদের জন্য, git archive --remoteপদ্ধতিটি সরাসরি কাজ করবে না, কারণ রফতানি URL সংক্ষিপ্ত । ইউআরএলটির জন্য আপনাকে গিটহাবকে অবশ্যই জিজ্ঞাসা করতে হবে, তারপরে সেই URL টি ডাউনলোড করুন download curlএটি সহজ করে তোলে:

curl -L https://api.github.com/repos/VENDOR/PROJECT/tarball | tar xzf -

এটি আপনাকে স্থানীয় ডিরেক্টরিতে রফতানি কোড দেবে। উদাহরণ:

$ curl -L https://api.github.com/repos/jpic/bashworks/tarball | tar xzf -
$ ls jpic-bashworks-34f4441/
break  conf  docs  hack  LICENSE  mlog  module  mpd  mtests  os  README.rst  remote  todo  vcs  vps  wepcrack

সম্পাদনা
আপনি যদি কোডটি নির্দিষ্ট, বিদ্যমান ডিরেক্টরিতে (গিথুব থেকে এলোমেলো পরিবর্তে) রাখতে চান:

curl -L https://api.github.com/repos/VENDOR/PROJECT/tarball | \
tar xzC /path/you/want --strip 1

11

হ্যাঁ, এই সংরক্ষণাগারে কোনো Git অন্তর্ভুক্তি ছাড়া আপনার কোড আর্কাইভ করার জন্য একটি পরিষ্কার এবং ঝরঝরে কমান্ড এবং কোন Git সম্পর্কে উদ্বেজক ছাড়া প্রায় পাস ইতিহাস কমিট ভাল।

git archive --format zip --output /full/path/to/zipfile.zip master 

এটি দুর্দান্ত, কেবল পরে গিটিগনোর সরিয়ে ফেলতে হবে এবং এটি সম্পন্ন হয়ে ভাগ করে নেওয়ার জন্য প্রস্তুত।
সোগগার

.Gitgnore ইত্যাদি অপসারণের জন্য গৃহীত উত্তর মন্তব্যে উল্লেখ করা হয়েছে: .gitattributes ফাইল ব্যবহার করুন, ফিডিংক্লাউড.গেক.এনজি
পোস্ট /

10

আমি কেবল এটিই উল্লেখ করতে চাই যে আপনি যে ক্ষেত্রে আছেন

  1. সংগ্রহস্থলের একটি সাব ফোল্ডার এক্সপোর্ট করে
  2. folder ফোল্ডার থেকে মোতায়েনের গন্তব্যে সবকিছু অনুলিপি করে ঠিক আছে
  3. এবং যেহেতু আপনার কাছে ইতিমধ্যে পুরো সংগ্রহস্থলের একটি অনুলিপি ঠিক আছে।

তারপরে আপনি কেবল cp foo [destination]উল্লিখিত পরিবর্তে ব্যবহার করতে পারেন git-archive master foo | -x -C [destination]


9

আপনি জিপ ফাইল হিসাবে যে কোনও প্রতিশ্রুতিতে রিমোট রেপো সংরক্ষণাগারভুক্ত করতে পারেন।

git archive --format=zip --output=archive.zip --remote=USERNAME@HOSTNAME:PROJECTNAME.git HASHOFGITCOMMIT

8

গিট-এক্সপোর্টের বাশ-বাস্তবায়ন।

আমি তাদের নিজস্ব ফাংশনে .empty ফাইল তৈরি এবং অপসারণের প্রক্রিয়াগুলিকে 'গিট-সংরক্ষণাগার' প্রয়োগে পুনরায় ব্যবহারের উদ্দেশ্যে (পরে পোস্ট করা হবে) খণ্ডিত করেছি।

আমি লক্ষ্য রফতানির ফোল্ডার থেকে অ-ওয়ান্টেড ফাইলগুলি সরাতে প্রক্রিয়ায় '.gitattributes' ফাইলটি যুক্ত করেছি। 'গিট-এক্সপোর্ট' ফাংশনটিকে আরও দক্ষ করার সময় প্রক্রিয়াটির অন্তর্ভুক্ত ভারবোসিটি।

EMPTY_FILE = "। খালি";

function create_empty () {
## Processing path (target-dir):
    TRG_PATH="${1}";
## Component(s):
    EXCLUDE_DIR=".git";
echo -en "\nAdding '${EMPTY_FILE}' files to empty folder(s): ...";
    find ${TRG_PATH} -not -path "*/${EXCLUDE_DIR}/*" -type d -empty -exec touch {}/${EMPTY_FILE} \;
#echo "done.";
## Purging SRC/TRG_DIRs variable(s):
    unset TRG_PATH EMPTY_FILE EXCLUDE_DIR;
    return 0;
  }

declare -a GIT_EXCLUDE;
function load_exclude () {
    SRC_PATH="${1}";
    ITEMS=0; while read LINE; do
#      echo -e "Line [${ITEMS}]: '${LINE%%\ *}'";
      GIT_EXCLUDE[((ITEMS++))]=${LINE%%\ *};
    done < ${SRC_PATH}/.gitattributes;
    GIT_EXCLUDE[${ITEMS}]="${EMPTY_FILE}";
## Purging variable(s):
    unset SRC_PATH ITEMS;
    return 0;
  }

function purge_empty () {
## Processing path (Source/Target-dir):
    SRC_PATH="${1}";
    TRG_PATH="${2}";
echo -e "\nPurging Git-Specific component(s): ... ";
    find ${SRC_PATH} -type f -name ${EMPTY_FILE} -exec /bin/rm '{}' \;
    for xRULE in ${GIT_EXCLUDE[@]}; do
echo -en "    '${TRG_PATH}/{${xRULE}}' files ... ";
      find ${TRG_PATH} -type f -name "${xRULE}" -exec /bin/rm -rf '{}' \;
echo "done.'";
    done;
echo -e "done.\n"
## Purging SRC/TRG_PATHs variable(s):
    unset SRC_PATH; unset TRG_PATH;
    return 0;
  }

function git-export () {
    TRG_DIR="${1}"; SRC_DIR="${2}";
    if [ -z "${SRC_DIR}" ]; then SRC_DIR="${PWD}"; fi
    load_exclude "${SRC_DIR}";
## Dynamically added '.empty' files to the Git-Structure:
    create_empty "${SRC_DIR}";
    GIT_COMMIT="Including '${EMPTY_FILE}' files into Git-Index container."; #echo -e "\n${GIT_COMMIT}";
    git add .; git commit --quiet --all --verbose --message "${GIT_COMMIT}";
    if [ "${?}" -eq 0 ]; then echo " done."; fi
    /bin/rm -rf ${TRG_DIR} && mkdir -p "${TRG_DIR}";
echo -en "\nChecking-Out Index component(s): ... ";
    git checkout-index --prefix=${TRG_DIR}/ -q -f -a
## Reset: --mixed = reset HEAD and index:
    if [ "${?}" -eq 0 ]; then
echo "done."; echo -en "Resetting HEAD and Index: ... ";
        git reset --soft HEAD^;
        if [ "${?}" -eq 0 ]; then
echo "done.";
## Purging Git-specific components and '.empty' files from Target-Dir:
            purge_empty "${SRC_DIR}" "${TRG_DIR}"
          else echo "failed.";
        fi
## Archiving exported-content:
echo -en "Archiving Checked-Out component(s): ... ";
        if [ -f "${TRG_DIR}.tgz" ]; then /bin/rm ${TRG_DIR}.tgz; fi
        cd ${TRG_DIR} && tar -czf ${TRG_DIR}.tgz ./; cd ${SRC_DIR}
echo "done.";
## Listing *.tgz file attributes:
## Warning: Un-TAR this file to a specific directory:
        ls -al ${TRG_DIR}.tgz
      else echo "failed.";
    fi
## Purgin all references to Un-Staged File(s):
   git reset HEAD;
## Purging SRC/TRG_DIRs variable(s):
    unset SRC_DIR; unset TRG_DIR;
    echo "";
    return 0;
  }

আউটপুট:

it গিট-এক্সপোর্ট /tmp/rel-1.0.0

খালি ফোল্ডারে (গুলি) -এ '.empty' ফাইল যুক্ত করা হচ্ছে: ... সম্পন্ন হয়েছে।

চেক আউট সূচি উপাদান (গুলি): ... সম্পন্ন হয়েছে।

হেড এবং সূচক পুনরায় সেট করা: ... সম্পন্ন হয়েছে।

গিট-নির্দিষ্ট উপাদান (গুলি) পরিষ্কার করা হচ্ছে ...

'/tmp/rel-1.0.0/{.buildpath files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.project files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.gitignore files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.git files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.gitributes files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{*.mno}' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{*~ files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.*~ files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{*.swp files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{*.swo}' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.DS_Store files' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.settings' ফাইল ... সম্পন্ন হয়েছে। '

'/tmp/rel-1.0.0/{.empty files' ফাইল ... সম্পন্ন হয়েছে। '

সম্পন্ন.

চেক-আউট উপাদান (গুলি) সংরক্ষণাগার: ... সম্পন্ন হয়েছে।

-rw-r - r-- 1 প্রশাসনিক চাকা 25445901 3 নভেম্বর 12:57 /tmp/rel-1.0.0.tgz

আমি এখন 'গিট আর্কাইভ' কার্যকারিতাটি একটি একক প্রক্রিয়াতে অন্তর্ভুক্ত করেছি যা 'create_empty' ফাংশন এবং অন্যান্য বৈশিষ্ট্যগুলি ব্যবহার করে।

function git-archive () {
    PREFIX="${1}"; ## sudo mkdir -p ${PREFIX}
    REPO_PATH="`echo "${2}"|awk -F: '{print $1}'`";
    RELEASE="`echo "${2}"|awk -F: '{print $2}'`";
    USER_PATH="${PWD}";
echo "$PREFIX $REPO_PATH $RELEASE $USER_PATH";
## Dynamically added '.empty' files to the Git-Structure:
    cd "${REPO_PATH}"; populate_empty .; echo -en "\n";
#    git archive --prefix=git-1.4.0/ -o git-1.4.0.tar.gz v1.4.0
# e.g.: git-archive /var/www/htdocs /repos/domain.name/website:rel-1.0.0 --explode
    OUTPUT_FILE="${USER_PATH}/${RELEASE}.tar.gz";
    git archive --verbose --prefix=${PREFIX}/ -o ${OUTPUT_FILE} ${RELEASE}
    cd "${USER_PATH}";
    if [[ "${3}" =~ [--explode] ]]; then
      if [ -d "./${RELEASE}" ]; then /bin/rm -rf "./${RELEASE}"; fi
      mkdir -p ./${RELEASE}; tar -xzf "${OUTPUT_FILE}" -C ./${RELEASE}
    fi
## Purging SRC/TRG_DIRs variable(s):
    unset PREFIX REPO_PATH RELEASE USER_PATH OUTPUT_FILE;
    return 0;
  }

ব্যবহার: Git-সংরক্ষণাগার [/ var / www / htdocs] /repos/web.domain/website:rel-1.0.0
tocororo

8

আপনি যদি এমন কিছু চান যা সাবমডিউলগুলির সাথে কাজ করে তবে এটি যেতে পারে।

বিঃদ্রঃ:

  • MASTER_DIR = আপনার সাবমডিউলগুলির সাথে একটি চেকআউট চেক আউটও
  • DEST_DIR = যেখানে এই রফতানি শেষ হবে
  • আপনার যদি আরএসসিএনসি থাকে তবে আমি মনে করি আপনি আরও কম বল ব্যথায় একই জিনিস করতে সক্ষম হবেন।

অনুমিতি:

  • আপনাকে এটিকে MASTER_DIR এর মূল ডিরেক্টরি থেকে চালানো দরকার (যেমন MASTER_DIR সিডি থেকে ..)
  • DEST_DIR তৈরি করা হয়েছে বলে মনে করা হয়। আপনি চাইলে একটি DEST_DIR তৈরি করতে অন্তর্ভুক্ত করে এটি পরিবর্তন করা বেশ সহজ

সিডি MASTER_DIR && tar -zcvf ../DEST_DIR/export.tar.gz --excolve = '। গিট *'। && সিডি ../DEST_DIR/ && ডার এক্সভিএফজেড এক্সপোর্ট.আর.gz এবং&m আরএমএস।


6

আমার পছন্দটি হ'ল আপনার মেকফাইলে (বা অন্য বিল্ড সিস্টেম) যে আপনার কোডের একটি বিতরণযোগ্য সংরক্ষণাগার (.tar.bz2, .zip, .jar, বা যা উপযুক্ত তা) রফতানি করে এমন একটি লক্ষ্য লক্ষ্য করা। আপনি যদি জিএনইউ অটোটুলগুলি বা পার্লের মেকমেকার সিস্টেমগুলি ব্যবহার করছেন বলে মনে হয় তবে আমি মনে করি এটি স্বয়ংক্রিয়ভাবে আপনার জন্য বিদ্যমান। যদি তা না হয় তবে আমি এটি যুক্ত করার পরামর্শ দিচ্ছি।

ETA (2012-09-06): বাহ, কঠোর ডাউনভোটস v আমি এখনও বিশ্বাস করি যে আপনার উত্স কোড নিয়ন্ত্রণ সরঞ্জামের চেয়ে আপনার বিল্ড সরঞ্জামগুলি দিয়ে আপনার বিতরণগুলি তৈরি করা ভাল। আমি বিল্ড সরঞ্জাম দিয়ে শিল্পকর্ম নির্মাণে বিশ্বাস করি। আমার বর্তমান চাকরিতে, আমাদের প্রধান পণ্যটি একটি পিঁপড়া লক্ষ্য নিয়ে তৈরি। আমরা সোর্স কোড নিয়ন্ত্রণ সিস্টেমগুলিতে স্যুইচিংয়ের মাঝে রয়েছি এবং এই পিঁপড়ার লক্ষ্যমাত্রার উপস্থিতি হ'ল অভিবাসনে কম ঝামেলা।


আমার মনে যে প্রকল্পটি ছিল তা কোনও কোড প্রকল্প নয়; এটি একটি ওয়েব সাইট প্রকল্পের লাইন বরাবর আরও হতে পারে।
গ্রেগ হিউগিল

প্রশ্নটির ঠিকানা দেয় না।
অ্যান্ড্রু ফেরিয়ার

1
হ্যাঁ, এই জাতীয় উত্তর সবার প্রয়োজনের সাথে খাপ খায় না, তবে নিম্নাঞ্চলগুলি উদ্ভট। এটা তোলে হয় , শুধুমাত্র সঠিক উত্তর অনেক পরিস্থিতিতে একটি সম্পূর্ণ বৈধ উত্তর, এবং প্রকৃতপক্ষে,। এটি অত্যন্ত কার্যকর পয়েন্টটি দেয় যে "ভিসি সরঞ্জাম ইস্যু" হিসাবে এই সমস্যাটি নিয়ে ভাবনা প্রায়শই পুরোপুরি ভুল পথে নেমে যায়।
snogglethorpe

6

এটি কমিটের একটি পরিসরে ফাইলগুলি (সি থেকে জি) একটি তারার ফাইলে অনুলিপি করবে। দ্রষ্টব্য: এটি কেবল কমিট করা ফাইলগুলি পাবে। পুরো সংগ্রহস্থল নয়। এখান থেকে কিছুটা পরিবর্তিত

ইতিহাস অঙ্গীকার উদাহরণ

এ -> বি -> সি -> ডি -> ই -> এফ -> জি -> এইচ -> আই

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT C~..G | xargs tar -rf myTarFile.tar

গিট-ডিফ-ট্রি ম্যানুয়াল পৃষ্ঠা

-r -> উপ-গাছগুলিতে পুনরাবৃত্তি করুন

--no-কমিট-আইডি -> গিট ডিফার-ট্রি প্রযোজ্য হলে কমিট আইডির সাথে একটি লাইন আউটপুট দেয়। এই পতাকাটি কমিট আইডি আউটপুটকে দমন করেছে।

- নাম-কেবল -> পরিবর্তিত ফাইলগুলির কেবলমাত্র নাম দেখান।

--diff-ફિલ્ટર = ACMRT -> কেবল এই ফাইলগুলি নির্বাচন করুন। ফাইলগুলির সম্পূর্ণ তালিকার জন্য এখানে দেখুন

সি..জি -> কমিটের এই সীমাতে থাকা ফাইল

সি ~ -> কমিট সি থেকে ফাইলগুলি অন্তর্ভুক্ত করুন কেবল কমিট সি থেকে ফাইলগুলি নয় files

| xargs tar -rf myTarFile -> তারপরে আউটপুট


5

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

এটি এইভাবে করা যেতে পারে:

git clone -b someBranch --depth 1 --single-branch git://somewhere.com/repo.git \
&& rm -rf repo/.git/
  • --single-branch গিট 1.7.10 (এপ্রিল 2012) থেকে পাওয়া যায়।
  • --depthআছে (ছিল?) বলে জানা ত্রুটিপূর্ণ, কিন্তু একটি রপ্তানির মামলা, উল্লিখিত বিষয় ব্যাপার না করা উচিত।

দ্রষ্টব্য: আমি সবেমাত্র লক্ষ্য করেছি যে এখানে 2 পৃষ্ঠার আনসার রয়েছে, আমি কেবল পোস্ট করার আগে একটির দিকে তাকিয়েছিলাম। কেবল একই সাথে একটি অনুরূপ অ্যাঞ্জার রয়েছে --depth, যা বোঝানো হয় --single-branchযদি না --no-single-branchদেওয়া হয় তবে এর অর্থ সম্ভবত এটি একই প্রভাব ফেলে। নিশ্চিত না হলেও, কিছু বিশেষজ্ঞ নিশ্চিত করতে পারেন?
ওন্দ্রা Žižka

4

আমার এটি একটি মোতায়েন করা স্ক্রিপ্টের জন্য প্রয়োজন এবং আমি উপরে বর্ণিত কোনও পদ্ধতির ব্যবহার করতে পারিনি। পরিবর্তে আমি একটি আলাদা সমাধান বের করেছিলাম:

#!/bin/sh
[ $# -eq 2 ] || echo "USAGE $0 REPOSITORY DESTINATION" && exit 1
REPOSITORY=$1
DESTINATION=$2
TMPNAME="/tmp/$(basename $REPOSITORY).$$"
git clone $REPOSITORY $TMPNAME
rm -rf $TMPNAME/.git
mkdir -p $DESTINATION
cp -r $TMPNAME/* $DESTINATION
rm -rf $TMPNAME

রিড-ট্রি / চেকআউট-ইনডেক্স বা সংরক্ষণাগার সমাধানের সাথে সমস্যাটি কী ছিল? যতদূর আমি বলতে পারি যে আপনি এর মতো কিছু সমতুল্য করেছেন mkdir -p "$2" && git --git-dir="$1" archive HEAD | tar -x -C "$2"তবে কিছুটা বেশি বাতাস বয়ে গেছে।
সিবি বেইলি

1
আমি রিমোট রিপোজিটরি থেকে কাজ করার জন্য রিড-ট্রি পেতে পারি না এবং সংরক্ষণাগার সমাধান গিথুব দিয়ে কাজ করে না।
ট্রয়সল্কন

হ্যাঁ আর্কাইভের সাথে একটি অবৈধ কমান্ড পান: 'গিট-আপলোড-সংরক্ষণাগার' ... ত্রুটি এবং আমার কাছে মূলসূত্র প্রিফিক্স কনফিগারেশন বিকল্প এবং জিআইT_প্রোসিওয়াই_মোমন্ড পরিবেশের পরিবর্তনশীল সেট নেই
tgkprog

4

এটি সহজ উপায়ে করা, এটি .Bash_profile এর জন্য একটি ফাংশন, এটি সরাসরি বর্তমান অবস্থানে সংরক্ষণাগারটি আনজিপ করে, প্রথমে আপনার সাধারণ [url: পাথ] কনফিগার করে। দ্রষ্টব্য: এই ফাংশনটির সাহায্যে আপনি ক্লোন অপারেশনটি এড়িয়ে যান, এটি সরাসরি দূরবর্তী রেপো থেকে আসে।

gitss() {
    URL=[url:path]

    TMPFILE="`/bin/tempfile`"
    if [ "$1" = "" ]; then
        echo -e "Use: gitss repo [tree/commit]\n"
        return
    fi
    if [ "$2" = "" ]; then
        TREEISH="HEAD"
    else
        TREEISH="$2"
    fi
    echo "Getting $1/$TREEISH..."
    git archive --format=zip --remote=$URL/$1 $TREEISH > $TMPFILE && unzip $TMPFILE && echo -e "\nDone\n"
    rm $TMPFILE
}

.Gitconfig জন্য উপন্যাস, একই কনফিগারেশন প্রয়োজন (.git প্রকল্পের ভিতরে কমান্ডটি সঞ্চালনের যত্ন নিন, এটি আগে যেমন এখানে বলা হয়েছে বেস ডাইরে লাফিয়ে যায়, এটি স্থির না হওয়া পর্যন্ত আমি ব্যক্তিগতভাবে ফাংশনটি পছন্দ করি

ss = !env GIT_TMPFILE="`/bin/tempfile`" sh -c 'git archive --format=zip --remote=[url:path]/$1 $2 \ > $GIT_TMPFILE && unzip $GIT_TMPFILE && rm $GIT_TMPFILE' -

4

এখন পর্যন্ত এটি করতে সবচেয়ে সহজ উপায় (এবং উইন্ডোতেও কাজ করে) হ'ল git bundle:

git bundle create /some/bundle/path.bundle --all

আরও তথ্যের জন্য এই উত্তরটি দেখুন: আমি কীভাবে আমার উইন্ডোজ মেশিন থেকে আমার গিট সংগ্রহস্থলটি ইউএসবি ড্রাইভের মাধ্যমে একটি লিনাক্স মেশিনে অনুলিপি করতে পারি?


git bundle.gitফোল্ডারটি অন্তর্ভুক্ত করে , যা ওপি চায় না; git archiveআরও উপযুক্ত উপায়ে মনে হচ্ছে
এসএসসি

--allস্যুইচটিতে ডকুমেন্টেশন কোথায় ?
গ্যারেট উইলসন

4

আমার কাছে আরও একটি সমাধান রয়েছে যা কার্যকর হয় যদি আপনি মেশিনে যেখানে রফতানি তৈরি করতে চান সেখানে স্থানীয় কপি থাকে। এক্ষেত্রে এই সংগ্রহস্থল ডিরেক্টরিতে যান এবং এই আদেশটি প্রবেশ করুন:

GIT_WORK_TREE=outputdirectory git checkout -f

এটি বিশেষত কার্যকর যদি আপনি গিট সংগ্রহস্থল সহ কোনও ওয়েবসাইট পরিচালনা করেন এবং এতে একটি পরিষ্কার সংস্করণ চেকআউট করতে চান /var/www/। এক্ষেত্রে, .git/hooks/post-receiveস্ক্রিপ্টে এই কম্যান্ড যুক্ত করুন ( hooks/post-receiveএকটি খালি ভাণ্ডারে, যা এই পরিস্থিতিতে আরও উপযুক্ত)


3

আমার মনে হয় @ অ্যারিড্রেলের পোস্টটি নিকটতম ছিল তবে এর থেকে আরও কিছুটা আছে - তাই আমি এটি এখানে যুক্ত করব; জিনিসটি হ'ল, svnযদি আপনি কোনও রেপোর সাবফোল্ডারে থাকেন এবং আপনি তা করেন:

/media/disk/repo_svn/subdir$ svn export . /media/disk2/repo_svn_B/subdir

তারপরে svnপুনর্বিবেচনার নিয়ন্ত্রণাধীন সমস্ত ফাইল রফতানি করবে (সেগুলিতে নতুনভাবে সংযোজন করা যেতে পারে; বা পরিবর্তিত স্থিতি) - এবং যদি আপনার সেই ডিরেক্টরিতে অন্য "জাঙ্ক" থাকে (এবং আমি .svnএখানে সাবফোল্ডারগুলি গণনা করছি না , তবে .oফাইলগুলির মতো দৃশ্যমান স্টাফ ) , এটি রফতানি হবে না ; কেবলমাত্র এসভিএন রেপো দ্বারা নিবন্ধিত ফাইলগুলি রফতানি হবে। আমার জন্য, এক চমৎকার ব্যাপার হল এই রপ্তানি স্থানীয় যে পরিবর্তন হয়েছে ফাইল রয়েছে না এখনো সংঘটিত; এবং আরেকটি সুন্দর বিষয় হ'ল রফতানি হওয়া ফাইলগুলির টাইমস্ট্যাম্পগুলি মূল ফাইলগুলির মতো। বা, যেমন svn help exportএটি রাখে:

  1. PATH1 দ্বারা উল্লিখিত ওয়ার্কিং কপি থেকে একটি পরিস্কার ডিরেক্টরি গাছটি পুনর্বিবেচনা REV এ রচনা করা হয়, যদি তা দেওয়া হয়, অন্যথায় ওয়ার্কিং এ, PATH2 তে। ... আরইভি নির্দিষ্ট না করা থাকলে, সমস্ত স্থানীয় পরিবর্তনগুলি সংরক্ষণ করা হবে। সংস্করণ নিয়ন্ত্রণে নেই এমন ফাইলগুলি অনুলিপি করা হবে না।

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বলেছেন:

ট্রিট আইডি বনাম যখন কমিট আইডি বা ট্যাগ আইডি দেওয়া হয় তখন গিট সংরক্ষণাগারটি আলাদা আচরণ করে। প্রথম ক্ষেত্রে বর্তমান সময়টি সংরক্ষণাগারে প্রতিটি ফাইলের পরিবর্তনের সময় হিসাবে ব্যবহৃত হয়। পরবর্তী ক্ষেত্রে রেফারেন্সড কমিট অবজেক্টে রেকর্ড করা কমিটের সময় পরিবর্তে ব্যবহৃত হয়।

... তবে দৃশ্যত উভয় ক্ষেত্রেই " প্রতিটি ফাইলের পরিবর্তনের সময়" সেট করা হয় ; এর ফলে সেই ফাইলগুলির প্রকৃত টাইমস্ট্যাম্পগুলি সংরক্ষণ করা যায় না !

সুতরাং, টাইমস্ট্যাম্পগুলি সংরক্ষণ করার জন্য, এখানে একটি 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

... এবং আশা করি একই টাইমস্ট্যাম্পগুলি দেখুন (সংস্করণ নিয়ন্ত্রণে থাকা সেই ফাইলগুলির জন্য)।

আশা করি এটি কাউকে সাহায্য করবে,
চিয়ার্স!


3

একটি উপসর্গ যুক্ত করার সময় একটি জিপ সংরক্ষণাগারে গিট রফতানি (উদাহরণস্বরূপ ডিরেক্টরি নাম):

git archive master --prefix=directoryWithinZip/  --format=zip -o out.zip

2

আপনার যদি সাবমডিউলগুলিরও প্রয়োজন হয় তবে এটি কৌশলটি করা উচিত: https://github.com/meitar/git-archive-all.sh/wiki


প্রকৃতপক্ষে, দেখে মনে হচ্ছে এতে কয়েকটি ছোট ছোট সমস্যা রয়েছে তাই এটি সম্ভবত প্রাইম টাইমের জন্য প্রস্তুত নাও হতে পারে।
ব্র্যান্ডন

1

আমার .bashrc ফাইলে আমার নীচের ইউটিলিটি ফাংশন রয়েছে: এটি একটি গিট সংগ্রহস্থলে বর্তমান শাখার একটি সংরক্ষণাগার তৈরি করে।

function garchive()
{
  if [[ "x$1" == "x-h" || "x$1" == "x" ]]; then
    cat <<EOF
Usage: garchive <archive-name>
create zip archive of the current branch into <archive-name>
EOF
  else
    local oname=$1
    set -x
    local bname=$(git branch | grep -F "*" | sed -e 's#^*##')
    git archive --format zip --output ${oname} ${bname}
    set +x
  fi
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.