мерзавец рефлог.Это правильное использование? - PullRequest
0 голосов
/ 30 марта 2011

на данный момент это гипотетически, но это рабочий процесс, который я хотел бы применить на практике.

У меня есть шаблон, с которого я запускаю все свои веб-проекты. В настоящее время я использую github для хранения основного шаблона и просто клонирую каждый раз, когда создаю проект.

Проблема в том, что, поскольку я делаю все больше и больше проектов, у меня есть функции, которые будут полезны в шаблоне, но сложно использовать их в моем текущем рабочем процессе.

Что я предлагаю, так это то, что я извлекаю шаблон из github в начале каждого проекта и собираю проект по локальной ветке. Когда я сталкиваюсь с чем-то, что, по моему мнению, будет полезно в главном шаблоне, я переключаюсь на основную ветку, внедряю там изменения, отправляю в github и затем использую reflog, чтобы перевести эти изменения со мной в текущее локальное состояние проекта.

Имеет ли это какой-то смысл, и я (как это вероятно) полностью пропустил точку рефлога?

большое спасибо

Ответы [ 3 ]

3 голосов
/ 30 марта 2011

Проще говоря, это перепишет историю.Это будет причинять вам боль, если вы работаете с github.Как уже было сказано, reflog - это не тот инструмент, который вы бы использовали на регулярной основе.

В вашем случае абсолютно нет причин использовать reflog.Вы можете иметь тот же рабочий процесс, просто делая это.Представьте, что вы работаете над веткой my_local_project, и у вас есть некоторые изменения, которые вы хотите внести в шаблон.Затем вы просто делаете:

git checkout master
# Hackety, hackety, make the change in your template
git checkout my_local_project
git merge master

Теперь все изменения, которые вы внесли в ветку master, будут аккуратно объединены в my_local_project.

Это будет даже работать(с небольшими изменениями), если вы храните свои проекты в разных репозиториях из шаблона.

3 голосов
/ 30 марта 2011

По моему мнению, reflog - один из самых уродливых инструментов в git - я не стал бы его использовать, если бы случайно не забил одно из своих изменений и не имел другого способа добраться до него.

Учитывая ваш предложенный рабочий процесс, я бы посоветовал заняться всем вашим кодированием в локальной ветке, и если вы в конечном итоге закодируете что-то полезное для шаблона, просто переключитесь на master и выберите отдельные коммиты, которые вы хотели бы задействовать. .

http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html

1 голос
/ 31 марта 2011

Я, честно говоря, до сих пор не понимаю, что вы имеете в виду под "использовать reflog, чтобы перенести эти изменения со мной в текущее локальное состояние проекта". Reflog просто показывает прошлые позиции данного реф. Вы все еще должны объединить / rebase / cherry-pick, чтобы фактически «принести» эти изменения в другое место. Вообще, слияние - самый элегантный способ.

Например:

git clone template local-project
cd local-project
git remote rename origin template-origin
# make changes and commit them
git add ...; git commit

# suppose changes have been made in the template (work as normal there)
# back in local-project, merge the template's master branch:
git pull template master

Ничего сложного. Просто объедините ветку с нужными вам изменениями. Это, вероятно, очевидно, но убедитесь, что вы никогда не потянете другой путь - из локального проекта в шаблон.

И, конечно, связывайтесь с пультами в зависимости от ситуации. Возможно, вы захотите создать новый «источник» для local-project, указывающий на его центральное (например, на github-hosted) хранилище, и то же самое для template. Вы также можете указать удаленный шаблон в local-project на центральный репозиторий шаблонов, а не на свой локальный клон, если хотите.

...