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
Поскольку файл удален, конфликт не будет