Как вытащить один файл из репозитория сервера в Git?


115

Я работаю над сайтом с сервером под управлением Git. Я использую Git для развертывания (не GitHub). Это было настроено до моего участия с использованием метода перехвата , и я обратился к этому вопросу и ввел команды ниже, но это не сработало.

Как мне вытащить один файл с сервера? Например, если я хочу обновить свой локальный файл index.php? git pull index.php?



Ответы:


195

Можно делать (в развернутом репозитории):

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 06

Должен ли он быть *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 / rm (не git rm) или его переименование / скрытие и затем выдача git pullне сработает: git замечает отсутствие файла и предполагает, что вы, вероятно, хотите, чтобы он удалился из репозитория ( git diffбудут показаны все строки, удаленные из репозитория). отсутствующий файл).

git pullотсутствие восстановления локально отсутствующих файлов всегда расстраивало меня по поводу git, возможно, потому что на меня повлияли другие системы контроля версий (например, обновление svn, которое, как я полагаю , восстановит файлы, которые были локально скрыты).

git reset --hard HEAD- альтернативный способ восстановить интересующий файл, поскольку он отбрасывает все незафиксированные изменения, которые у вас есть. Однако, как здесь отмечено , git reset - это потенциально опасная команда, если у вас есть какие-либо другие незафиксированные изменения, которые вас волнуют.

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]

Ex. https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php

Благодаря этому вы получите содержимое отдельного файла в виде текста строки. Вы можете скачать этот текст с помощью wget.

Ex. 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 \ имя пользователя \ Рабочий стол> sparse_checkout.bat

C: \ Users \ имя пользователя \ Desktop> pushd "C: \ Users \ имя пользователя \ Desktop \"

C: \ Users \ имя пользователя \ Desktop>, если не существует. \ Ms-server-essentials-docs mkdir. \ Ms-server-essentials-docs

C: \ Users \ имя пользователя \ Рабочий стол> 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 \ user name \ Desktop \ ms-server-essentials-docs> git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git Удаленное обновление источника: перечисление объектов: 97, выполнено. удаленный: Подсчет объектов: 100% (97/97), готово. remote: Сжатие объектов: 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-конфликт * [новая ветка] конфликтфикс -> источник / конфликтфикс * [новая ветка] eross-msft-patch-1 -> origin / eross-msft-patch-1 * [новая ветка]
FromPrivateRepo -> origin / FromPrivateRepo * [новая ветка]
PR183 -> origin / PR183 * [новая ветка]


мастер -> origin / master * [новая ветка] patch-1
-> origin / patch-1 * [новая ветка] repo_sync_working_branch -> origin / repo_sync_working_branch * [новая ветка]
shortpatti-patch-1 -> origin / shortpatti-patch-1 * [новая ветка]
shortpatti-patch-2 -> origin / shortpatti -patch-2 * [новая ветка]
shortpatti-patch-3 -> origin / shortpatti-patch-3 * [новая ветка]
shortpatti-patch-4 -> origin / shortpatti-patch-4 * [новая ветка]
shortpatti-patch -5 -> origin / shortpatti-patch-5 * [новая ветка]
shortpatti-patch-6 -> origin / shortpatti-patch-6 * [новая ветка]
shortpatti-patch-7 -> origin / shortpatti-patch-7 * [новая ветка]
shortpatti-patch-8 -> origin / 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 origin master
Из https://github.com/MicrosoftDocs/windowsserverdocs
* branch master -> FETCH_HEAD

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.