Есть ли способ проверить один файл мастера, который находится позади во многих коммитах Git? - PullRequest
2 голосов
/ 09 июня 2011

У меня есть рабочий процесс кода, зависящий от вытягивания изменений из клонов репо на машинах разработчиков в мастер репо, затем обновления копий этого мастера репо на компьютерах prod с использованием чего-то вроде «git fetch», за которым следует «git». слияния «.

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

На данный момент все продакшн-машины отстают от главного репо примерно на 10 коммитов. Это только самый последний коммит, который я хочу использовать в машинах. «Git fetch && git merge» ускоряет перемотку всего моего репо, когда все, что мне нужно, это пересылка одного файла.

Какой лучший способ выбрать этот файл? Если я "git checkout file.ext", то он обновляется из локальной копии репо, а не обновленного мастера. Я бы хотел, чтобы моя локальная копия «знала» о самой последней версии файла без обновления всего остального.

Моя идея заключалась в том, чтобы сделать «git fetch» ​​для обновления репозитория и затем «git checkout file.ext» для обновления только одного файла. Это лучший способ сделать то, что я хочу сделать? Если нет, может кто-нибудь посоветовать мне, пожалуйста, способ извлечения одного обновленного файла от мастера, который отстает во многих коммитах Git?

Ответы [ 3 ]

3 голосов
/ 09 июня 2011

Попробуйте что-то вроде

git fetch
git checkout master -- src/your/file.txt
1 голос
/ 09 июня 2011

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

git log remoteRepo/remotebranch

, а не хеш коммита, который содержит версию отдельного файла, который вы хотите объединить с вашим локальным репозиторием. И после того, как у вас есть этот хеш вместо запуска git fetch && git merge , вы должны выполнить:

git fetch && git checkout <HASH> <PATH_TO_SINGLE_FILE>

теперь у вас должен быть обновленный файл в вашей рабочей ветке.

С уважением, Рене

0 голосов
/ 09 июня 2011

Примечание: это решение не использует какие-либо специфические команды git.Для выполнения всей этой работы может использоваться одна команда git.

Сделать копию обновленного отдельного файла где-то вне контроля ревизии.
Перейти к старой ревизии (той, на которой работают производственные машины).
Скопируйте обновленный отдельный файл обратно в систему контроля версий.
Регистрация создаст новую ветвь.
Оформление новой ветки на производственных машинах.

...