Як витягнути один файл із серверного сховища в 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:?
vsvs

Дякую за пояснення.
vsvs

Це може бути *origin*/masterчи може бути з якогось віддаленого? Чи вся історія втягнута в мою репо або чи файл здається магічним?
Бернхард Дьоблер

Якщо ви отримаєте цю помилку, "не відповідав жодному файлу, відомому git": "шлях / до / файл" не повинен бути копією шляху, який ви отримуєте з розташування файлу на GitHub, що означає "repoName / fileName" , ви повинні позбутися від "repoName /", і тоді воно спрацює.
Едуард

1
@ BernhardDöbler це може бути будь-яка гілка з віддаленого :)
chrismillah

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

Це припускаючи, що ви витягуєте файл з origin / master.



5

Цей сценарій з'являється, коли ви - або сили, що перевищують вас, - керували файлом у вашому місцевому репо, і ви просто хочете відновити свіжу копію останньої його версії з репо. Просто видаліть файл / bin / ет (НЕ мерзотник ет) або перейменування / приховування, а потім видачі 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
Увага: "git checkout master - index.php" це не робити замовлення з сервера, а з локальної бази даних git з останнього потягу.
Роберто Новакоський

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
ОП спеціально вказав у питанні, що він не використовує github.
Zeitounator

0

Ця партія Windows працює незалежно від того, є вона на GitHub чи ні. Я використовую це, тому що він показує деякі суворі застереження. Ви помітите, що операція повільна і проходить сотні мегабайт даних , тому не використовуйте цей метод, якщо ваші вимоги базуються на доступній пропускній здатності / RW пам'яті.

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 \ ім'я користувача \ 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 Ініціалізоване порожнє сховище Git у C: / Users / ім'я користувача / Desktop / ms-server-essentials-docs / .git /

C: \ Users \ ім'я користувача \ Desktop \ ms-server-essentials-docs> git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git Оновлення вихідного джерела: Перерахування об'єктів: 97, виконано. віддалений: підрахунок об’єктів: 100% (97/97), виконано. віддалений: стиснення об’єктів: 100% (44/44), виконано. віддалений: Всього 145517 (дельта 63), повторно використаний 76 (дельта 53), повторно використаний пакет 145420 Отримані об'єкти: 100% (145517/145517), 751,33 МіБ | 32,06 Мбіт / с, виконано. Розв’язування дельти: 100% (102110/102110), виконано. Від https://github.com/MicrosoftDocs/windowsserverdocs * [нова гілка]
1106-конфлікт -> походження / 1106-конфлікт * [нова гілка]
FromPrivateRepo -> походження / FromPrivateRepo * [нова гілка]
PR183 -> походження / PR183 * [нова філія]
конфлікт -> початок / конфлікт * [нова гілка]
eross-msft-patch-1 -> вихід / eross-msft-patch-1 * [нова гілка]
master -> походження / master * [нова гілка] patch-1
-> origin / patch-1 * [нова гілка] repo_sync_working_branch -> походження / repo_sync_working_branch * [нова гілка]
shortpatti-patch-1 -> походження / shortpatti-patch-1 * [нова гілка]
shortpatti-patch-2 -> походження / шортпатті -patch-2 * [нова гілка]
shortpatti-patch-3 -> походження / shortpatti-patch-3 * [нова гілка]
shortpatti-patch-4 -> походження / shortpatti-patch-4 * [нова гілка]
shortpatti-patch -5 -> походження / shortpatti-patch-5 * [нова філія]
shortpatti-patch-6 -> походження / shortpatti-patch-6 * [нова гілка]
shortpatti-patch-7 -> походження / shortpatti-patch-7 * [нова галузь]
shortpatti-patch-8 -> походження / shortpatti-patch-8

C: \ Users \ ім'я користувача \ Desktop \ ms-server-essentials-docs> git config core.sparseCheckout true

C: \ Users \ ім'я користувача \ Desktop \ ms-server-essentials-docs> (echo EssentialsDocs) 1 >>. Git \ info \ sparse-checkout

C: \ Users \ ім'я користувача \ Desktop \ ms-server-essentials-docs> git pull master master
Від https://github.com/MicrosoftDocs/windowsserverdocs
* master - - FETCH_HEAD

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.