Git में सर्वर रिपॉजिटरी से सिंगल फाइल कैसे खींचे?


114

मैं एक साइट पर काम कर रहा हूं जिसमें एक सर्वर Git चल रहा है। मैं तैनाती के लिए Git का उपयोग कर रहा हूं (GitHub नहीं)। यह एक हुक विधि का उपयोग करके मेरी भागीदारी से पहले स्थापित किया गया था , और मैंने इस प्रश्न का उल्लेख किया और नीचे दिए गए आदेशों में प्रवेश किया, लेकिन यह काम नहीं किया।

मैं सर्वर से किसी एकल फ़ाइल को कैसे खींचूं? उदाहरण के लिए, यदि मैं अपने स्थानीय फ़ाइल index.php को अद्यतन करना चाहता था? git pull index.php?



जवाबों:


194

यह करना संभव है (तैनात भंडार में):

git fetch
// git fetch will download all the recent changes, but it will not put it in your current checked out code (working area).

के बाद:

git checkout origin/master -- path/to/file
// git checkout <local repo name (default is origin)>/<branch name> -- path/to/file will checkout the particular file from the downloaded changes (origin/master).

1
धन्यवाद। तो आपका क्या मतलब है <revision>? फ़ाइल का नाम? और अगर मेरी फ़ाइल रूट डायरेक्टरी में है तो इसका मतलब है कि मुझे टाइप करना होगा git checkout -m index.php index.php:?
22

विवरण के लिए आपका धन्यवाद।
विस्फ़ोटक

क्या यह होना चाहिए *origin*/masterया यह किसी भी दूरस्थ से हो सकता है? क्या पूरा इतिहास मेरे रेपो में खींच लिया गया है या फ़ाइल जादुई रूप से प्रकट होती है?
बर्नहार्ड डब्लर

यदि आपको यह त्रुटि मिलती है "git के लिए जानी जाने वाली किसी भी फ़ाइल से मेल नहीं खाती": "पथ / से / फ़ाइल" उस पथ की प्रतिलिपि नहीं होनी चाहिए जो आपको GitHub पर फ़ाइल स्थान से मिलती है, जिसका अर्थ है "repoName / fileame" , आपको "रेपोनाम /" से छुटकारा मिलना चाहिए और फिर यह काम करेगा।
एडुआर्ड

1
@ बर्नहार्डडब्लर यह रिमोट से किसी भी शाखा हो सकता है :)
क्रिस्मिल्लाह

27
git fetch --all
git checkout origin/master -- <your_file_path>
git add <your_file_path>
git commit -m "<your_file_name> updated"

यह मान रहा है कि आप फ़ाइल को मूल / मास्टर से खींच रहे हैं।



5

यह परिदृश्य तब सामने आता है जब आप - या आपसे अधिक बल - आपके स्थानीय रेपो में एक फ़ाइल मंगाई हो और आप केवल रेपो से इसके नवीनतम संस्करण की एक नई प्रतिलिपि को पुनर्स्थापित करना चाहते हैं। बस / बिन / आरएम (जीआईटी आरएम नहीं) के साथ फाइल को डिलीट करना या उसका नाम बदलना और छुपाना और फिर एक git pullवसीयत जारी करना काम नहीं करेगा: फाइल की अनुपस्थिति को नोटिस करता है और मानता है कि आप चाहते हैं कि यह रेपो से चला गया हो ( git diffसभी लाइनों को हटा दिया जाएगा) लापता फाइल)।

git pullस्थानीय रूप से लापता फ़ाइलों को पुनर्स्थापित नहीं करने से मुझे हमेशा git के बारे में निराशा हुई है, शायद जब से मैं अन्य संस्करण नियंत्रण प्रणालियों (जैसे svn अद्यतन जो मुझे लगता है कि स्थानीय रूप से छिपी हुई फ़ाइलों को पुनर्स्थापित करेगा ) से प्रभावित होता है ।

git reset --hard HEADब्याज की फ़ाइल को पुनर्स्थापित करने का एक वैकल्पिक तरीका है क्योंकि यह आपके द्वारा किए गए किसी भी अपरिवर्तित परिवर्तन को फेंक देता है। हालाँकि, जैसा कि यहाँ उल्लेख किया गया है , यदि आप कोई अन्य परिवर्तन नहीं करते हैं, जिसके बारे में आप परवाह करते हैं , तो git रीसेट एक संभावित खतरनाक कमांड है।

git fetch ... git checkoutरणनीति @chrismillah से ऊपर बताया गया है सवाल में फ़ाइल को पुनर्स्थापित करने के लिए एक अच्छा सर्जिकल तरीका है।


1
दूसरों की टिप्पणियों की तुलना में बहुत गूढ़ है। धन्यवाद
Thecave3

3

मैं थोड़ा अलग काम की तलाश में था, लेकिन ऐसा लगता है कि आप क्या चाहते हैं:

git archive --remote=$REPO_URL HEAD:$DIR_NAME -- $FILE_NAME |
tar xO > /where/you/want/to/have.it

मेरा मतलब है, अगर आप लाने के लिए चाहते हैं path/to/file.xz, तो आप सेट हो जाएगा DIR_NAMEकरने के लिए path/toऔर FILE_NAMEकरने के लिए file.xz। तो, आप कुछ इस तरह से समाप्त करेंगे

git archive --remote=$REPO_URL HEAD:path/to -- file.xz |
tar xO > /where/you/want/to/have.it

और कोई भी आपको tar xOपाठ्यक्रम के बजाय अनपैकिंग के किसी अन्य रूप से नहीं रखता है (यह मैं था जिसे यहां एक पाइप की आवश्यकता है, हाँ)।


1

प्रयोग करके देखें:

git checkout branchName -- fileName

उदाहरण के लिए:

git checkout master -- index.php

2
ध्यान दें: "गिट चेकआउट मास्टर - index.php" यह सर्वर से चेकआउट नहीं करता है, लेकिन पिछले पुल से स्थानीय गिट डेटाबेस से।
रॉबर्टो नोवाकोस्की

0
https://raw.githubusercontent.com/[USER-NAME]/[REPOSITORY-NAME]/[BRANCH-NAME]/[FILE-PATH]

पूर्व। https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php

इसके माध्यम से आपको एक पंक्ति के रूप में एक व्यक्तिगत फ़ाइल की सामग्री मिल जाएगी। आप उस पाठ को wget के साथ डाउनलोड कर सकते हैं।

पूर्व। https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php


1
ओपी ने विशेष रूप से इस सवाल में संकेत दिया कि वह जीथब का उपयोग नहीं कर रहा है।
Zeitounator

0

यह विंडोज़ बैच GitHub पर है या नहीं इसकी परवाह किए बिना काम करता है। मैं इसका उपयोग कर रहा हूं क्योंकि यह कुछ स्टार्क कैविएट दिखाता है। आप देखेंगे कि ऑपरेशन धीमा है और सैकड़ों मेगाबाइट डेटा का पता लगा रहा है , इसलिए यदि आपकी आवश्यकताएं उपलब्ध बैंडविड्थ / आरडब्ल्यू मेमोरी पर आधारित हैं तो इस पद्धति का उपयोग न करें।

sparse_checkout.bat

pushd "%~dp0"
if not exist .\ms-server-essentials-docs mkdir .\ms-server-essentials-docs
pushd .\ms-server-essentials-docs
git init
git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git
git config core.sparseCheckout true
(echo EssentialsDocs)>>.git\info\sparse-checkout
git pull origin master

=>

C: \ Users \ उपयोगकर्ता नाम \ Desktop> sparse_checkout.bat

C: \ Users \ उपयोगकर्ता नाम \ Desktop> pushd "C: \ Users \ उपयोगकर्ता नाम \ Desktop \"

C: \ Users \ user नाम \ Desktop> यदि मौजूद नहीं है। \ ms-server-Essentials-docs mkdir। \ Ms-server-Essentials-docs

C: \ Users \ उपयोगकर्ता नाम \ Desktop> pushd। \ Ms-server-Essentials-docs

C: \ Users \ उपयोगकर्ता नाम \ Desktop \ ms-server-Essentials-docs> git init प्रारंभ में C: / उपयोगकर्ता / उपयोगकर्ता नाम / डेस्कटॉप / ms-server-अनिवार्य-डॉक्स / .IT / में खाली Git रिपॉजिटरी।

C: \ Users \ उपयोगकर्ता नाम \ Desktop \ ms-server-Essentials-docs> git रिमोट मूल जोड़ें -f https://github.com/MicrosoftDocs/windowsserverdocs.git अपडेट करने का मूल रिमोट: ऑब्जेक्ट्स को अलग करना: 97, किया। दूरस्थ: गिनती की वस्तुओं: 100% (97/97), किया। दूरस्थ: संपीड़ित वस्तुएं: 100% (44/44), किया। रिमोट: कुल 145517 (डेल्टा 63), पुन: उपयोग किए गए 76 (डेल्टा 53), पैक-पुन: उपयोग किए गए 145420 प्राप्त करने वाले ऑब्जेक्ट: 100% (145517/145517), 751.33 MiB | 32.06 MiB / s, किया गया। समाधान डेल्टा: 100% (102110/102110), किया। से https://github.com/MicrosoftDocs/windowsserverdocs * [नई शाखा]
1106-संघर्ष -> मूल / 1106-संघर्ष * [नई शाखा]
FromPrivateRepo -> मूल / FromPrivateRepo * [नई शाखा]
PR183 -> मूल / PR183 * [नई शाखा]
विरोधाभासी -> मूल / विरोधाभास * * [नई शाखा]
इरोस-एमएसएफटी-पैच -1 -> मूल / इरॉस-एमएसएफटी-पैच -1 * [नई शाखा]
मास्टर -> मूल / मास्टर * [नई शाखा] पैच -1
-> उत्पत्ति / पैच -1 * [नई शाखा] repo_sync_working_branch -> मूल / repo_sync_working_branch * [नई शाखा]
शॉर्टपट्टी-पैच -1 -> मूल / शॉर्टपट्टी-पैच -1 * [नई शाखा]
शॉर्टपट्टी-पैच -2 -> मूल / शॉर्टपत्ती
-पैच -2 * [नई शाखा] शार्टपट्टी-पैच -3 -> मूल / शॉर्टपट्टी-पैच -3 * [नई शाखा]
शॉर्टपट्टी-पैच -4 -> मूल / शॉर्टपट्टी-पैच -4 * [नई शाखा]
शॉर्टपट्टी-पैच -5 -> मूल / लघुपट्टी-पैच -5 * [नई शाखा]
लघुपट्टी-पैच -६ -> मूल / लघुपट्टी-पैच -६ * [नई शाखा]
शॉर्टपट्टी-पैच -7 -> मूल / शॉर्टपट्टी-पैच -7 * [नई शाखा]
शॉर्टपट्टी-पैच-origin -> मूल / शॉर्टपट्टी-पैच-8

C: \ Users \ उपयोगकर्ता नाम \ Desktop \ ms-server-Essentials-docs> git config core.sparseCheckout true

C: \ Users \ उपयोगकर्ता नाम \ Desktop \ ms-server-Essentials-docs> (गूंज EssentialsDocs) 1 >>। Git \ info \ sparse-checkout।

C: \ Users \ उपयोगकर्ता नाम \ डेस्कटॉप \ एमएस-server-अनिवार्य-डॉक्स> Git पुल मूल स्वामी
से https://github.com/MicrosoftDocs/windowsserverdocs
* शाखा मास्टर -> FETCH_HEAD

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.