Git: Как обновить/проверить один файл с удаленного источника?

Сценарий:

  • Я делаю некоторые изменения в одном файле локально и запускаю git add, git commit и git push
  • Файл помещается в основной репозиторий удаленного источника.
  • У меня есть другой локальный репозиторий, который развертывается через Capistrano с помощью метода "remote_cache" из этого удаленного репозитория
  • Теперь я не хочу развертывать все приложение, а просто обновлять/проверять этот файл.

Пожалуйста, это как-то возможно с git? Я не смог найти ничего, что могло бы работать, и я не смог бы понять это. С SVN я просто сделал svn up file и вуаля.

Буду рад за любую помощь, спасибо!

Ответ 1

Git не работает для отдельных файлов. Я не знаю настройки remote_cache, поэтому я не могу прокомментировать это. Однако в git вам нужно clone весь репозиторий, внести изменения в файл (ы), зафиксировать его (это локальная операция), а затем отменить изменения.

В вашей настройке вы можете просто pull внести изменения из главного репозитория (назовите его M) на ваш развернутый репозиторий capistrano (назовите его B). Я не понимаю, почему у вас возникла проблема. Если B существенно отличается, и вы не хотите его испортить, вы можете добавить M как remote в B, а затем cherry-pick конкретные коммиты, которые вас интересуют (например, обновление файла, говоря о) в B. Будет ли это работать для вас?

Ответ 2

Возможно (в развернутом репозитории)

git fetch
git checkout origin/master -- path/to/file

В fetch будут загружены все последние изменения, но он не будет помещен в текущий текущий код (рабочая область).

Касса обновит рабочее дерево с определенным файлом из загруженных изменений (origin/master).

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

Ответ 3

У меня работает следующий код:

     git fetch
     git checkout <branch from which file needs to be fetched> <filepath> 

Ответ 4

git archive --format=zip --remote=ssh://<user>@<host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.zip

Ответ 5

Что вы можете сделать:

  • Обновите локальное репозиционирование git:

    git fetch

  • Создайте локальную ветку и проверите на ней:

    git branch pouet && git checkout pouet

  • Примените фиксацию, которую вы хотите в этой ветке:

    git cherry-pick abcdefabcdef

    (abcdefabcdef - это sha1 коммита, который вы хотите применить)

Ответ 6

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

Этот способ не является sooooo круто, но он def работает, если вы, ребята, не можете понять ничего другого.

Ответ 7

С Git 2.23 (август 2019 г.) и новой (все еще экспериментальной) командой git restore, описанной в "Как сбросить все файлы из рабочего каталога, но не из промежуточной области?", это было бы:

git fetch
git restore -s origin/master -- path/to/file

Идея такова: git restore имеет дело только с файлами, а не с файлами и ветвями, как git checkout.
Смотрите "Запутано git checkout": вот где git switch входит)

Ответ 8

Я думаю, что нашел легкий взлом.

Удалите файл, который у вас есть в локальном репозитории (файл, который вы хотите обновить от последней фиксации на удаленном сервере)

И затем сделайте git pull

Поскольку файл удален, конфликт не будет