একটি সংগ্রহস্থল থেকে একটি ফাইল পুনরুদ্ধার করুন


220

দূরবর্তী গিট সংগ্রহস্থল থেকে একটি একক ফাইলের বিষয়বস্তু পাওয়ার জন্য সবচেয়ে কার্যকর প্রক্রিয়াটি (ব্যবহৃত ডেটা ট্রান্সফার এবং ডিস্ক স্পেস ব্যবহারের ক্ষেত্রে) কী?

এখনও অবধি আমি এগুলিতে আসতে সক্ষম হয়েছি:

git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt

এটি এখনও ওভারকিল বলে মনে হচ্ছে।

রেপো থেকে একাধিক ফাইল পাওয়ার কী?


3
Aaw। "বিড়াল-রিমোট" এবং "ট্যাগ-রিমোট" এর সমতুল্য করার মতো কোনও বিল্ট তৈরি করা থাকলে আমি এটিকে পছন্দ করব।
কনিকে

3
আমার একই সমস্যাটি আমি 2 লাইনে একই লাইসেন্স ফাইলটি রাখতে চাই; 1 টি রেপোতে ফাইলটি সম্পাদনা করুন তারপরে অন্য রেপোতে অনুলিপিটি স্বয়ংক্রিয়ভাবে আপডেট করুন।
গ্লাসগোস্ট

উত্তর:


143

গিট সংস্করণে 1.7.9.5 এ এটি একটি রিমোট থেকে একক ফাইল রফতানি করার কাজ করে বলে মনে হচ্ছে

git archive --remote=ssh://host/pathto/repo.git HEAD README.md

এটি ফাইলের বিষয়বস্তুগুলিকে বিড়াল করবে README.md


27
... গিটহাবে কাজ না করা বাদে। Dang। :( twitter.com/GitHubHelp/status/322818593748303873
রব হাওয়ার্ড

13
এটি কাঁচা ফাইলটি নয় বরং কেবল একটি একক ফাইলের সাথে একটি টার ফাইল উত্পন্ন বলে মনে হচ্ছে।
ফ্রেরিচ রাবাবে

20
পছন্দ করুন কমান্ডটি টার -x`। git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x cat README.md

12
আপনি tar -xOFILE=README.md && git archive --remote=ssh://host/pathto/repo.git HEAD "$FILE" | tar -xO "$FILE"
পাইপিংয়ের

2
ঠিক আমি উত্তরটি খুঁজছিলাম, তবে আমি পেয়েছি "মারাত্মক: প্রোটোকল দ্বারা অপারেশন সমর্থন করে না।" গিটের জবাবে আহা।
mhvelplund

68

জাকুব এর উত্তর থেকে অনুসরণ করা । git archiveএকটি টার বা জিপ সংরক্ষণাগার উত্পাদন করে, তাই ফাইলের সামগ্রী পেতে আপনাকে টারের মাধ্যমে আউটপুটটি পাইপ করতে হবে:

git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x

বর্তমান ডিরেক্টরিতে দূরবর্তী সংগ্রহস্থলের হেড থেকে 'ফাইলনাম' এর একটি অনুলিপি সংরক্ষণ করবে।

:path/to/directoryঅংশ ঐচ্ছিক। যদি বাদ না দেওয়া হয় তবে আনীত ফাইলটি এতে সংরক্ষণ করা হবে<current working dir>/path/to/directory/filename

এছাড়াও, আপনি যদি git archive --remoteগিট-ডিমন দ্বারা হোস্ট গিট সংগ্রহস্থলগুলিতে ব্যবহার সক্ষম করতে চান , আপনাকে ডিমন.আপলোডার্ক কনফিগারেশন বিকল্পটি সক্ষম করতে হবে। Https://kernel.org/pub/software/scm/git/docs/git-daemon.html দেখুন


2
যদি এটি কোনও পাঠ্য ফাইল হয় এবং আমরা এটি অন্য একটি অংশে এটি সংরক্ষণ করতে চাই তবে এটি ব্যবহার করা অন্ত্র: | tar -xO> ~ / destfile.ext
yucer

44

যদি ওয়েব ইন্টারফেস স্থাপন করা হয় (যেমন গিটওয়েব, সিজিট, গিটারিয়াস, গিনাত্রা), আপনি এটি একক ফাইল ('কাঁচা' বা 'প্লেইন' ভিউ) ডাউনলোড করতে ব্যবহার করতে পারেন।

তাহলে অন্য দিকে এটি সক্ষম , আপনি ব্যবহার করতে পারেন Git সংরক্ষণাগার 'S' --remote=<URL>(এবং সম্ভবত মধ্যে একটি ডিরেক্টরি দেওয়া ফাইল ছবিটিই তা সীমাবদ্ধ) 'বিকল্প, উদাহরণস্বরূপ:

$ git archive --remote=git@github.com:foo/bar.git --prefix=path/to/ HEAD:path/to/ |  tar xvf -

দ্রষ্টব্য: উদাহরণটি পরীক্ষা করা হয়নি!
জাকুব নারেবস্কি

7
আপনার নিজস্ব সংগ্রহস্থলের জন্য গিটার-ডেমন (গিট: // স্টাইল ইউআরএল) git config daemon.uploadarch trueরিমোট রিপোজিটরির সাথে ব্যবহার করা হলে আপনাকে বিশেষ করে আপলোড-সংরক্ষণাগার সক্ষম করতে হবে । ডিফল্টরূপে Git ডেমন অক্ষম দূরবর্তী সঙ্গে আর্কাইভ "মারাত্মক: রিমোট ত্রুটি: অ্যাক্সেস অস্বীকৃত বা সংগ্রহস্থলের রপ্তানি না: ..."
patthoyts

+1 git archiveপদ্ধতিটি আমার প্রথম চেষ্টা ছিল - তবে আমি লক্ষ্য করেছি যে tarক্লায়েন্ট মেশিনে উইন্ডোজ ব্যবহারকারীদের জন্য প্রয়োজনীয়তা ঠিক তেমন সুবিধাজনক ছিল না। আমরা আমাদের স্থানীয় cgitসার্ভার থেকে আনতে শেষ করেছি । এটি কাজ করে, তবে এটি যতটা দ্রুত চাই তা তত দ্রুত নয় (এবং এটি এখনও unix2dosউইন্ডোজ মেশিনে চলমান বা একইরকম প্রয়োজন যেহেতু আমরা গিট সংগ্রহস্থলে ইউনিক্স লাইনের সমাপ্ত ফাইলগুলি সংরক্ষণ করি)।
ফ্রেরিচ রাবাবে

1
পছন্দ করুন - formatt = <fmt> বিকল্পটিও দেখুন।
আখন

5
এটির জন্য মূল্যবান, গিটহাব হোস্ট করা সংগ্রহস্থলগুলিতে এটি কাজ করে না বলে মনে হচ্ছে। দেখুন help.github.com/articles/can-i-archive-a-repository এবং groups.google.com/forum/#!topic/github/z8vLHcX0HxY
vmrob

30

সাধারণভাবে নয় তবে আপনি যদি গিথুব ব্যবহার করছেন:

আমার wgetকাছে কাঁচা ইউআরএল একটি নির্দিষ্ট ফাইল ডাউনলোড করার সেরা এবং সহজ উপায় হিসাবে পরিণত হয়েছিল।

ব্রাউজারে ফাইলটি খুলুন এবং "কাঁচা" বোতামটি ক্লিক করুন। এখন আপনার ব্রাউজার রিফ্রেশ করুন, URL কপি এবং একজন না wgetবা curlএটা।

উইজেটের উদাহরণ:

wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py

কার্ল উদাহরণ:

curl 'https://example.com/raw.txt' > savedFile.txt


3
এটি সবচেয়ে সহজ সমাধান এবং এটি যে কোনও কাঁচা txt এর সন্ধান করতে পারে তার জন্য কাজ করে। curl https://example.com/raw.txt > savedFile.txt
জ্যাকবপরিসৌ

উইজেটের উদাহরণটি কাজ করে না, কার্ল উদাহরণ যদিও দেয়।
কাইল বেকার

আমার জন্য ঠিক কাজ করে। আপনি কি ইউআরএলকে কমান্ডলাইনে উদ্ধৃতিতে রেখেছিলেন?
অঙ্কুর আগরওয়াল

এটি গিট ইতিহাস সংরক্ষণ করে না
ক্রিপডিক

15

রিমোট থেকে একক ফাইল রফতানি করতে:

git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x

এটি ফাইলটি ডাউনলোড করবে README.md আপনার বর্তমান ডিরেক্টরিতে ।

আপনি যদি ফাইলের সামগ্রীগুলি STDOUT রফতানি করতে চান:

git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -xO

কমান্ডের শেষে আপনি একাধিক পাথ সরবরাহ করতে পারেন।


9

এটি আমার কাছে সমাধানের মতো মনে হচ্ছে: http://gitready.com/interedia/2009/02/27/get-a-file-from-a-specific-revision.html

git show HEAD~4:index.html > local_file

যেখানে 4এখন থেকে চারটি সংশোধন ~করা হয়েছে এবং মন্তব্যে উল্লিখিত একটি টিলড।


নিশ্চিত হয়ে নিন যে এটি 'হেড' এবং '4' এর মধ্যে 'বিয়োগ চিহ্ন' - 'নয়, তবে' টিল্ড '' ~ '। স্পষ্টতই আমি গিট ডক্সটি যথেষ্ট পরিমাণে পড়িনি, বা আমার চশমার আপডেটের প্রয়োজন ;-)
ডেনিস

18
এটি ওপি-র প্রয়োজনের মতো কোনও রিমোট রিপোজিটরি থেকে ফাইলটি পাবে বলে মনে হয় না।
মাইক ওয়েলার

বা: git show HEAD:./my_other_file > local_fileফাইলটি যদি আপনার মূল রুটে না থাকে :)
কেনারব

1
সমস্ত অবক্ষয়কারীদের জন্য দয়া করে অনুরোধ করুন - দয়া করে কী ঠিক নেই তা ব্যাখ্যা করুন এবং ব্যাখ্যা করুন - আমরা শিখতে এবং ভাগ করতে এখানে আছি :)
মার্স রবার্টসন

9
@ মিশলস্টেফানো: মাইক ওয়েলারের রয়েছে এটি; বিশেষত, এটি কোনও দূরবর্তী সংগ্রহস্থলটিতে কাজ করে না। আপনার খুব কমপক্ষে একটি স্থানীয় ক্লোন প্রয়োজন, এমনকি যদি আপনার এটিতে রিমোটগুলি সেট আপ করা থাকে।
রব হাওয়ার্ড

6

আমি এটি ব্যবহার করি

$ cat ~/.wgetrc
check_certificate = off

$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'

এমনকি wgetrc টুইট ছাড়াই আমার জন্য কাজ করে:wget https://raw.github.com/bk322/bk_automates/master/bkubuntu/bkubuntu.bash
অ্যাডোব

1
আমার বার্তা আরও সহায়ক:ERROR: Certificate verification error for raw.github.com: unable to get local issuer certificate. To connect to raw.github.com insecurely, use '--no-check-certificate'.
কোস

3
এটি কেবল সর্বজনীন সংগ্রহস্থলের জন্য কাজ করে। ব্যক্তিগত সংগ্রহস্থলের জন্য আপনার প্রমাণীকরণ প্রয়োজন।
রিকার্ডো ওটারো

5

এখানে উত্তরগুলির কয়েকটি সংখ্যক রূপ যা ওপি-র প্রশ্নের উত্তর দেয়:

git archive --remote=git@archive-accepting-git-server.com:foo/bar.git \
  HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt

এটি কাজ করে না, গিথুব গিট সংরক্ষণাগারটিকে সমর্থন করে না।
ফিলিপ ফ্লেঙ্কার

2
এরর ..
গিটটি

1
আপনি সুস্পষ্টভাবে আপনার উত্তরে একটি গিথুব ইউআরএল নির্ধারণ করুন
ফিলিপ ফ্লেঙ্কার

1
সাহায্য করার জন্য ধন্যবাদ. সেই অনুযায়ী উত্তরটি সংশোধন করেছেন।
উইলেম ভ্যান কেটউইচ

2

আপনি যদি সংগ্রহশালা টোকেনগুলিকে সমর্থন করে (উদাহরণস্বরূপ গিটল্যাব) তবে আপনার ব্যবহারকারীর জন্য একটি টোকেন তৈরি করে তারপরে যে ফাইলটি ডাউনলোড করবেন এবং ইউআরএল পেতে RAW আউটপুট ক্লিক করবেন। ফাইলটি ডাউনলোড করতে ব্যবহার করুন:

curl --silent --request GET --header 'PRIVATE-TOKEN: replace_with_your_token' \
'http://git.example.com/foo/bar.sql' --output /tmp/bar.sql

2

আমি এইভাবে সমাধান করেছি:

git archive --remote=ssh://git@gitlab.com/user/mi-repo.git BranchName /path-to-file/file_name | tar -xO /path-to-file/file_name > /path-to-save-the-file/file_name

আপনি যদি চান, আপনি "শিরোনাম" এর জন্য "ব্রাঞ্চনাম" প্রতিস্থাপন করতে পারেন


2

নিম্নলিখিতগুলি ব্যবহারের সবচেয়ে সহজ উপায় এটি আমার কাছে মনে হচ্ছে:

wget https://github.com/name/folder/file.zip?raw=true

1

ইস্রায়েল ডভের উত্তরটি সোজা। তবে এটি সংকোচনের অনুমতি দেয় না। তুমি ব্যবহার করতে পার--format=zip , তবে আপনি তারের মতো পাইপ কমান্ডের সাহায্যে সরাসরি আনজিপ করতে পারবেন না, তাই আপনাকে এটি একটি অস্থায়ী ফাইল হিসাবে সংরক্ষণ করতে হবে। এখানে একটি স্ক্রিপ্ট রয়েছে:

#!/bin/bash

BASENAME=$0

function usage {
    echo "usage: $BASENAME <remote-repo> <file> ..."
    exit 1
}

[ 2 -gt "$#" ] && { usage; }

REPO=$1
shift
FILES=$@

TMPFILE=`mktemp`.zip
git archive -9 --remote=$REPO HEAD $FILES -o $TMPFILE
unzip $TMPFILE
rm $TMPFILE

এটি ডিরেক্টরিগুলির সাথেও কাজ করে।


1

একক ফাইলের জন্য, কেবল উইজেট কমান্ড ব্যবহার করুন।

প্রথমে ইউআরএল পেতে "কাঁচা" ক্লিক করতে নীচের ছবিটি অনুসরণ করুন, অন্যথায় আপনি এইচটিএমএল এমবেড কোড ডাউনলোড করবেন। এখানে চিত্র বর্ণনা লিখুন

তারপরে, ব্রাউজারটি https://raw.githubusercontent.com/ দিয়ে url শুরু করে একটি নতুন পৃষ্ঠা খুলবে ...

টার্মিনালে কমান্ডটি প্রবেশ করুন:

#wget https://raw.githubusercontent.com/...

ফাইলটি আপনার ফোল্ডারে রাখবে will


হ্যাঁ, এটি পাইথন বা অন্যান্য প্রোগ্রামিং ভাষার মধ্যে একটি রেস্ট-ফানসিওনালিটি সহ দুর্দান্ত কাজ করে। উদাহরণস্বরূপ বিভিন্ন সংগ্রহস্থল থেকে মডিউল ডাউনলোড করার জন্য ..
লার্স জিজে

1

যদি আপনার গিট রিপোজিটরি অ্যাজুরে-ডিভোপস (ভিএসটিএস) এ হোস্ট করে থাকে তবে আপনি বিশ্রাম এপিআই সহ একটি ফাইল পুনরুদ্ধার করতে পারবেন

এই API এর ফর্ম্যাটটি এর মতো দেখাচ্ছে:

 https://dev.azure.com/{organization}/_apis/git/repositories/{repositoryId}/items?path={pathToFile}&api-version=4.1?download=true

উদাহরণ স্বরূপ:

 https://dev.azure.com/{organization}/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml&download=true&api-version=4.1

এর জন্য এপি টোকেন দরকার, তাই না?
ইউরি পোজনিয়াক

আপনি কীভাবে এপি চালাবেন তার উপর নির্ভর করে
শাইকি আব্রামসিযেক

0

আমি কার্ল ব্যবহার করি, এটি পাবলিক রেপো বা ওয়েব ইন্টারফেসের মাধ্যমে https বেসিক প্রমাণীকরণ ব্যবহারকারীদের সাথে কাজ করে।

curl -L --retry 20 --retry-delay 2 -O https://github.com/ACCOUNT/REPO/raw/master/PATH/TO/FILE/FILE.TXT -u USER:PASSWORD

আমি এটি গিথুব এবং বিটবাকেটে পরীক্ষা করেছি, দুটিতেই কাজ করে।


0

আপনি যদি একটি নির্দিষ্ট হ্যাশ + একটি রিমোট রিপোজিটরি থেকে ফাইল পেতে চান তবে আমি গিট-সংরক্ষণাগারটি চেষ্টা করেছি এবং এটি কার্যকর হয়নি।

আপনাকে গিট ক্লোন ব্যবহার করতে হবে এবং একবার ভান্ডারটি ক্লোন হয়ে গেলে আপনার এটির জন্য গিট-সংরক্ষণাগারটি ব্যবহার করতে হবে।

কীভাবে এটি আরও সরলভাবে করা যায় সে সম্পর্কে আমি একটি প্রশ্ন পোস্ট করি দূরবর্তী থেকে নির্দিষ্ট একটি হ্যাশ থেকে গিট সংরক্ষণাগারটিতে


0

সরাসরি ব্রাউজার থেকে বিটবাকেটের জন্য (আমি সাফারি ব্যবহার করেছি ...) 'ভিউ কাঁচা' -তে ডান ক্লিক করুন এবং "লিঙ্কযুক্ত ফাইল ডাউনলোড করুন" নির্বাচন করুন:

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


0

আপনি যদি পুরো ডিরেক্টরিটি ক্লোনিং করতে আপত্তি না করেন তবে এই ছোট বাশ / zsh ফাংশনটিতে আপনার বর্তমান ডিরেক্টরিতে কোনও একক ফাইল ক্লোনিংয়ের শেষ ফলাফল হবে (একটি টেম্প ডিরেক্টরিতে রেপো ক্লোনিং করে এটি পরে মুছে ফেলা হবে)।

প্রো: আপনি কেবল যে ফাইলটি চান তা পান

কন: আপনার এখনও পুরো রেপো ক্লোন হয়ে যাওয়ার জন্য অপেক্ষা করতে হবে

git-single-file () {
        if [ $# -lt 2 ]
        then
                echo "Usage: $0 <repo url> <file path>"
                return
        fi
        TEMP_DIR=$(mktemp -d)
        git clone $1 $TEMP_DIR
        cp $TEMP_DIR/$2 .
        rm -rf $TEMP_DIR
}

এই উত্তরটি বিচ্ছিন্ন ক্লোন তৈরি করতে সহায়তা করতে পারে, এটি ওভারহেড ছাড়াই।
ইউরি পোজনিয়াক

0

গিথুব এন্টারপ্রাইজ সলিউশন

HTTPS_DOMAIN=https://git.your-company.com
ORGANISATION=org
REPO_NAME=my-amazing-library
FILE_PATH=path/to/some/file
BRANCH=develop
GITHUB_PERSONAL_ACCESS_TOKEN=<your-access-token>

URL="${HTTPS_DOMAIN}/raw/${ORGANISATION}/${REPO_NAME}/${BRANCH}/${FILE_PATH}"

curl -H "Authorization: token ${GITHUB_PERSONAL_ACCESS_TOKEN}" ${URL} > "${FILE_PATH}"

আমরা কোথায় খুঁজে পাই GITHUB_PERSONAL_ACCESS_TOKEN?
শ্যাড স্টার্লিং

1
আপনি https: // <yur-github-server> / সেটিংস / টোকেনগুলিতে গিয়ে এবং "নতুন টোকেন উত্পন্ন করুন" বোতামটি টিপে ব্যক্তিগত অ্যাক্সেস টোকন তৈরি করতে পারেন।
অলিভার পিয়ারমাইন

হুঁ, আমাদের অটোমেশন রয়েছে যা একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড দেওয়া হয়েছে, যা একই এসএসও ব্যবহার করে এমন একাধিক সিস্টেমে প্রমাণীকরণ করতে ব্যবহৃত হয়, তাই আমি একটি ব্যবহারকারী নাম এবং পাসওয়ার্ড দিয়ে একটি টোকেন উত্পন্ন করার জন্য একটি উপায় আশা করছিলাম।
শ্যাড স্টার্লিং

0

যদি আপনার লক্ষ্যটি কেবল ফাইলটি ডাউনলোড করা হয় তবে ঝামেলা-মুক্ত অ্যাপ্লিকেশন বলা আছে gget:

gget github.com/gohugoio/hugo 'hugo_extended_*_Linux-ARM.deb'

উপরের উদাহরণটি hugoসংগ্রহস্থল থেকে একক ফাইল ডাউনলোড করবে ।

https://github.com/dpb587/gget


-1

@ স্টিভেন পেনি এর উত্তর সম্পর্কিত, আমি উইজেটও ব্যবহার করি। তদুপরি, কোন ফাইলটি আমি -O ব্যবহার করে আউটপুট প্রেরণ করব তা স্থির করতে।

আপনি যদি গিটল্যাব ব্যবহার করছেন তবে ইউআরএল-এর আর একটি সম্ভাবনা হ'ল:

wget "https://git.labs.your-server/your-repo/raw/master/<path-to-file>" -O <output-file>

গিটল্যাব ইনস্টলেশনের জন্য যদি আপনার শংসাপত্র না থাকে বা আপনি কোনও বিশ্বস্ত সার্ভার থেকে অ্যাক্সেস না করেন তবে @ কোস যেমন বলেছেন তেমন - নন-চেক-শংসাপত্রের প্রয়োজন। আমি .Wgetrc পরিবর্তনের পরিবর্তে এটিকে পছন্দ করি তবে এটি আপনার প্রয়োজনের উপর নির্ভর করে।

যদি এটি একটি বড় ফাইল হয় তবে আপনি উইজেটের সাথে -c বিকল্পটি বিবেচনা করতে পারেন। পূর্ববর্তী উদ্দেশ্যটি যদি মাঝখানে ব্যর্থ হয় তবে ফাইলটি যেখান থেকে ছেড়ে দিয়েছিলেন তা ডাউনলোড করতে চালিয়ে যেতে।

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