2015-02-06 3 views
27

Я работаю над сайтом с сервером, на котором работает Git. Я использую Git для развертывания (а не GitHub). Это было установлено до моего участия, используя hook method, и я упомянул this question и ввел приведенные ниже команды, но это не сработало.Как вытащить один файл из репозитория сервера в Git?

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

+1

Возможный дубликат [Можно ли вытащить только один файл в Git?] (Http://stackoverflow.com/questions/16230838/is-it-possible-to-pull-just-one-file-in- git) –

+0

Возможный дубликат [Как проверить только один файл из репозитория git?] (http://stackoverflow.com/questions/2466735/how-to-checkout-only-one-file-from-git-repository) –

ответ

64

Это можно сделать (в развернутом хранилище):

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 origin/master -- path/to/file will checkout the particular file from the the downloaded changes (origin/master). 
+1

Спасибо. Итак, что вы подразумеваете под ''? имя файла? И если мой файл находится в корневом каталоге, это означает, что я должен ввести: 'git checkout -m index.php index.php'? – vsvs

+0

Благодарим вас за объяснение. – vsvs

+0

Может ли это быть «происхождение */мастер» или может быть с любого пульта? Вся история втянута в мое репо или кажется, что файл кажется волшебным? –

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

Это предполагает, что вы тянете файл из происхождения/мастера.

-3
git clone <git_repository>.git <path_to_desired_file> 

Таким образом, чтобы вытащить из MINAStatCollector.java: https://github.com/igniterealtime/Openfire/tree/master/src/java/org/apache/mina/management, вы сделали следующее:

git clone https://github.com/igniterealtime/Openfire.git Openfire/src/java/org/apache/mina/management/MINAStatCollector.java 
+0

Просто обратите внимание, что это не клонирует один файл ... Он клонирует весь репозиторий в путь к файлу, который вы хотите клонировать. –

0

Попробуйте использовать:

GIT оформления заказа branchName - FileName

Ex: мерзавец выезд мастера - index.php

0

Этот сценарий возникает когда вы - или силы больше, чем вы, - искал файл в своем локальном репо, и вы просто хотите восстановить новую копию последней версии из репо. Просто удалив файл с/bin/rm (не git rm) или переименовав/скрыв его, а затем выдав git pull не будет работать: git замечает отсутствие файла и предполагает, что вы, вероятно, хотите, чтобы он ушел из репо (git diff отобразит все строки, удаленные из пропавшего файла).

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

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

Стратегия git fetch ... git checkout, отмеченная выше @chrismillah, является хорошим хирургическим способом восстановления файла, о котором идет речь.

Смежные вопросы