Вот проблема мерзавца.Я делаю приложение по изучению программирования в чистом (командной строке) Ruby.Это приложение позволяет пользователю создавать и планировать обзоры задач программирования, управлять файлами, в которых выполняются задачи, и автоматически запускать результат из приложения.Для этих целей мне не нужен git, когда есть один файл.Но наиболее сложные задачи и задачи веб-программирования включают редактирование и использование нескольких файлов, и для управления этим мне нужно использовать git , и я не очень хорош в git.
В приложенииОжидается, что создатель этих более сложных «повторных задач» задаст вопросы на основе git-ветки (по своему выбору) репо (по своему выбору).Поэтому я полагаю, что для этого требуется, чтобы для каждого репо существовала серия ветвей, каждая из которых поддерживается независимо друг от друга, и каждая из которых является относительно стабильной;и приложение в основном проверяет филиалы по мере необходимости, чтобы ответить на вопросы.Это звучит просто ...
Проблемы:
После того, как я сделаю новые ветви (вручную, с git checkout -b branch_name
) и добавлюновые файлы, я, кажется, не могу проверить некоторые предыдущие ветки.Например:
$ git checkout foobar_JS_enabled_missing_prompt
error: The following untracked working tree files would be overwritten by checkout:
display_nodename.html
Please move or remove them before you switch branches.
Aborting
Мне (кажется, мне) нужно git reset --hard
ответвлений после того, как пользователь закончит отвечать на вопрос.Но выполнение этого, похоже, непреднамеренно очистило файл, над которым я усердно работал при создании более поздней ветви.Я думаю, это потому, что я жестко переустановил более раннюю ветку, в которой указанный файл был пустым.
Взаимодействие с git, которое выполняет приложение (в основном используя ruby-git )far is:
- На самом деле создавать репо и ветки вручную.
- Список ветвей для тех, кто задает вопросы на выбор.
Оформить ветки, когда онивыбранный, используя
g = Git.open("data/repos/#{repo}")
g.branch(branch).checkout
Выполните полный сброс ветви, на которой основан вопрос, когда пользователь начинает отвечать на вопрос, используя:
g = Git.open("data/repos/#{repo}")
g.reset_hard
Я еще не сделал этого, но я хочу создать ветвь архива для каждого вопроса, т. Е. Хочу разрешить автору вопроса ответитьстарый ответ, затем переключитесь на основную ветку для этого вопроса, чтобы создать новый ответ.
В основном, я хочу замороженные версии каждой ветви, но процесс (описанный выше)кажется, создает нежелательные взаимодействия.Я думал, что ветви были изолированы друг от друга автоматически.Что я делаю неправильно?Что мне нужно сделать, чтобы заморозить последнюю зафиксированную версию каждой ветви, независимо от того, что происходит в других ветках, в то время как я часто переключаюсь между ветками?
ОБНОВЛЕНИЕ (11/18): я уйдуэто скорее комментарий, чем ответ, потому что вопрос немного неясен.Я никогда не понимал, что индекс и дерево не зависят от ветвей.Так что в моем коде действительно было несколько тонких ошибок, связанных с тем, что я позволил своему дереву стать нечистым.В нескольких местах мне нужно было выполнить полную перезагрузку кода, прежде чем позволить ответчику начать работу над ответом, даже если в большинстве случаев это не требуется.Мне также нужно было сделать полный сброс кода после того, как ответчик завершит работу.Еще одна вещь, которую мне нужно было сделать, это проверить, какая ветка в настоящий момент проверена, и переключиться на нужную (я уже сделал это, но не везде, где должен был).
Кажется, сейчас работает, и я больше не могу копировать ошибки.