Как оформить заказ на один файл из репозитория git?
git
file
git-checkout
sparse-checkout
Артур Ульфельдт
источник
источник
Ответы:
Первоначально, я уже в 2012 году
git archive
(см Джаред Форсайт «s ответ и Роберт Найт » s ответ ), так как git1.7.9.5 (март 2012) , Пол Бреннан «s ответ :Но в 2013 году это стало невозможным для удаленных URL-адресов https://github.com .
Смотрите старую страницу " Могу ли я заархивировать репозиторий? "
На текущей (2018) странице « Об архивации контента и данных на GitHub » рекомендуется использовать сторонние сервисы, такие как GHTorrent или GH Archive .
Таким образом, вы также можете иметь дело с локальными копиями / клонами:
В качестве альтернативы вы можете сделать следующее, если у вас есть локальная копия чистого репозитория, как указано в этом ответе ,
Или вы должны сначала клонировать репо, то есть получить полную историю: - в репозитории .git - в рабочем дереве.
git config core.sparsecheckout true
).git/info/sparse-checkout
файлеЧтобы перечитать рабочее дерево:
Таким образом, вы получите рабочее дерево, включающее в себя именно то, что вы хотите (даже если это всего один файл)
Ричард Гомес указывает ( в комментариях ): « Как мне клонировать, получить или разрознить извлечение одного каталога или списка каталогов из репозитория git? »
источник
git archive
сейчас.Сначала клонируйте репо с помощью параметра -n, который подавляет извлечение по умолчанию всех файлов, и параметра --depth 1, что означает, что он получает только самую последнюю версию каждого файла.
Затем проверьте только тот файл, который вы хотите, вот так:
источник
-n
рабочим деревом и индексом в конечном итоге в синхронизации. То есть весь контент отображается как удаленный. Вы должны либоgit reset HEAD
илиgit checkout HEAD file
. Также очень трудно работать с репозиторием, пока вы действительно не понимаете, как работает git.rm -rf .git
к сценарию NickMoore, очистил бы все следы клонированного репо и, возможно, ослабил бы беспокойство Джефроми по поводу сложного репо, лежащего вокруг. Это делает очень полезным для меня несколько приложений, например, моя сегодняшняя задача - создать хук пост-получения для автоматического обновления версии другого хука пост-получения.git
не лучшим для этой работы). Этот ответ также действителен для этого или другого популярного вопроса , а также для многих других: изменитеname_of_file
наname_of_folder
. Git in now (2014) предлагает субмодули владельцу репо, а также некоторые дружественные для пользователей репо.Если у вас уже есть копия репозитория git, вы всегда можете проверить версию файла, используя
git log
ключ для определения хэш-идентификатора (например, 3cdc61015724f9965575ba954c8cd4232c8b42e4), а затем просто набрать:Вот фактический пример:
источник
path-to-file
это каталог, а текущийHEAD
содержит определенный файл, аtarget
его нет (или наоборот), это не будет корректно обновлять файл. Есть ли способ справиться?Как правило, невозможно загрузить только один файл
git
без загрузки всего хранилища, как это предлагается в первом ответе. Это потому, что Git хранит файлы не так, как вы думаете (как это делают CVS / SVN), а генерирует их на основе всей истории проекта.Но есть некоторые обходные пути для конкретных случаев. Примеры ниже с заполнителями для
user
,project
,branch
,filename
.GitHub
GitLab
GitWeb
Если вы используете Git на сервере - GitWeb , то вы можете попробовать в качестве примера (изменить его на правильный путь):
GitWeb на drupalcode.org
Пример:
googlesource.com
Существует недокументированная функция, которая позволяет вам загружать версии сырых файлов в кодировке base64:
В других случаях проверьте, использует ли ваш репозиторий Git какие-либо веб-интерфейсы.
Если он не использует какой-либо веб-интерфейс, вы можете отправить свой код во внешние службы, такие как GitHub , Bitbucket и т . Д. и использовать его как зеркало.
Если вы не
wget
установили, попробуйтеcurl -O (url)
альтернативно.источник
wget
ответ, и простота вернется вместе со счастьем. Спасибо чувак.git checkout branch_or_version - путь / файл
пример:
git checkout HEAD -- main.c
источник
Минимальное руководство
git checkout -- <filename>
Ссылка: https://git-scm.com/docs/git-checkout
Дуп: Отменить изменения рабочей копии одного файла в Git?
источник
git-checkout
.Теперь мы можем! Поскольку это первый результат в Google, я решил обновить его до последней версии. С появлением git 1.7.9.5 у нас есть
git archive
команда, которая позволит вам получить один файл с удаленного хоста.Смотрите полный ответ здесь https://stackoverflow.com/a/5324532/290784
источник
github.com
HEAD
илиmaster
нетHEAD:directory
.git archive --remote=git@bitbucket.org:user/repo branch:path/to file | tar -x
Работа в GIT 1.7.2.2
Например, у вас есть удаленный some_remote с филиалами branch1 , branch32
поэтому для извлечения конкретного файла вы вызываете эти команды:
в качестве примера это будет примерно так
Эта команда извлечения скопирует всю файловую структуру conf / en и conf / fr в текущий каталог, где вы вызываете эти команды (конечно, я предполагаю, что вы когда-то запускали git init)
источник
git fetch some_remote
раньше, не так ли?Очень просто:
Это не будет оформить заказ
from-branch-name
филиала. Вы останетесь в той ветке, в которой находитесь, и только этот единственный файл будет извлечен из указанной ветки.Вот соответствующая часть справочной страницы для
git-checkout
Шляпный совет Арьеян де Врум, который научил меня этому из этого поста в блоге .
источник
git clone --filter
из Git 2.19Эта опция фактически пропускает выборку большинства ненужных объектов с сервера:
Сервер должен быть настроен с:
Начиная с версии v2.19.0 сервер не поддерживается, но его уже можно локально протестировать.
TODO:
--filter=blob:none
пропускает все BLOB-объекты, но по-прежнему выбирает все объекты дерева. Но в обычном репо это должно быть крошечным по сравнению с самими файлами, так что это уже достаточно хорошо. На вопрос: https://www.spinics.net/lists/git/msg342006.html Разработчики ответили, что--filter=tree:0
находится в разработке.Помните, что
--depth 1
уже подразумевается--single-branch
, смотрите также: Как мне клонировать одну ветку в Git?file://$(path)
Требуется преодолетьgit clone
протокол махинаций: Как мелко клонировать локальный репозиторий git с относительным путем?Формат
--filter
задокументированman git-rev-list
.Для поддержки этой функции было сделано расширение для протокола Git remote.
Документы по дереву Git:
Проверьте это
GitHub вверх по течению .
Выход в Git v2.19.0:
Выводы: все капли, кроме
d1/a
, отсутствуют. Напримерf70a17f51b7b30fec48a32e4f19ac15e261fd1a4
, чтоd1/b
там нет после проверкиd1/
.Обратите внимание, что
root/root
иmybranch/mybranch
также отсутствуют, но--depth 1
скрывает это из списка отсутствующих файлов. Если удалить--depth 1
, то они отобразятся в списке отсутствующих файлов.источник
Вы можете сделать это,
источник
Скажем, имя файла 123.txt, это работает для меня:
Если файл находится в каталоге A, убедитесь, что он указан правильно:
источник
Два варианта того, что уже было дано:
а также:
Они записывают файл в стандартный вывод.
источник
В git вы не извлекаете файлы перед их обновлением - кажется, это то, что вам нужно.
Многие системы, такие как clearcase, csv и т. Д., Требуют, чтобы вы «извлекли» файл, прежде чем вносить в него изменения. Git не требует этого. Вы клонируете хранилище, а затем вносите изменения в локальную копию хранилища.
После обновления файлов вы можете сделать:
Чтобы увидеть, какие файлы были изменены.
index
Сначала вы добавляете те, которые хотите зафиксировать (index
это как список для проверки):или
Тогда do
git status
покажет вам, какие файлы были изменены, а какие вindex
готовы к отправке или регистрации.Для фиксации файлов в вашей копии хранилища выполните:
Смотрите
git
веб-сайт для ссылок на руководства и руководства.источник
git format-patch
для создания исправления для отправки (git format-patch -1
создаст исправление только для вашего последнего коммита).Вот полное решение для извлечения и передачи только определенного файла внутри репозитория git:
Также см. Ссылку для получения дополнительной информации.
источник
Похоже, вы пытаетесь перенести идею из централизованного контроля версий, которой нет по природе git - она распространяется. Если вы хотите работать с git-репозиторием, вы клонируете его. Затем у вас есть все содержимое рабочего дерева и вся история (ну, по крайней мере, все, что ведет к вершине текущей ветви), а не только один файл или снимок с одного коммита.
источник
Если вам нужен определенный файл из определенной ветки из удаленного Git-репозитория, введите команду:
Остальное можно получить из ответа @ VonC:
Если вам нужен определенный файл из главной ветки, это:
Если вам нужен определенный файл из тега, это:
источник
Я не вижу, что сработало для меня, перечисленных здесь, поэтому я включу это, если кто-то будет в моей ситуации.
В моей ситуации у меня есть удаленный репозиторий, может быть, 10000 файлов, и мне нужно создать RPM-файл для моей системы Linux. Сборка RPM включает в себя git clone всего. Все, что мне нужно, это один файл для запуска сборки RPM. Я могу клонировать все дерево исходных текстов, которое делает то, что мне нужно, но для загрузки всех этих файлов требуются дополнительные две минуты, когда все, что мне нужно, это один. Я попытался использовать рассмотренный вариант архива git и получил «фатальный: операция не поддерживается протоколом». Кажется, мне нужно включить какую-то опцию архивирования на сервере, и мой сервер обслуживается бюрократическими головорезами, которые, кажется, любят затруднять выполнение своих задач.
В конце концов я зашел в веб-интерфейс для bitbucket и просмотрел один нужный мне файл. Я щелкнул правой кнопкой мыши по ссылке, чтобы загрузить сырую копию файла, и выбрал «копировать ярлык» в появившемся всплывающем окне. Я не мог просто загрузить необработанный файл, потому что мне нужно было что-то автоматизировать, и у меня нет интерфейса браузера на моем сервере Linux.
Ради обсуждения, которое привело к URL:
Я не мог напрямую загрузить этот файл из репозитория bitbucket, потому что мне нужно было сначала войти в систему. Немного покопавшись, я обнаружил, что это работает: В Linux:
Эта комбинация позволила мне загрузить один файл, который мне нужен, чтобы собрать все остальное.
источник
Я добавляю этот ответ в качестве альтернативы формальной проверке или какой-либо подобной локальной операции. Предполагая, что у вас есть доступ к веб-интерфейсу вашего провайдера Git, вы можете напрямую просматривать любой файл с заданным желаемым коммитом. Например, на GitHub вы можете использовать что-то вроде:
Вот
ed25584f
первые 8 символов из хэша SHA-1 интересующего коммита, за которым следует путь к исходному файлу.Похоже, на Bitbucket мы можем попробовать:
В этом случае мы помещаем хеш коммита в конец исходного URL.
источник
Если вам нужно только загрузить файл, нет необходимости проверять его с помощью Git.
GitHub Mate гораздо проще сделать, это расширение Chrome, позволяющее щелкнуть значок файла, чтобы загрузить его. также с открытым исходным кодом
источник
git
! =github
Если вы отредактировали локальную версию файла и хотите вернуться к исходной версии, хранящейся на центральном сервере, это можно легко сделать с помощью расширений Git .
Легко!
источник