Как реорганизовать хранилище после удаления и переименования папок? - PullRequest
0 голосов
/ 15 декабря 2009

У меня было решение, которое состояло из двух проектов - ProjectName и ProjectName v2.0 Сначала я не использовал контроль версий, поэтому я продублировал все (скопировал имя проекта и назвал его ProjectName v2.0 ). Через некоторое время я начал использовать Git и добавил папку v2.0 (Git добавляет «ProjectName v2.0»). Позже я удалил исходную папку (ProjectName) и переименовал ProjectName v2.0 в ProjectName.

Теперь, когда я запускаю Git, он отображает уведомления:

удален: ....

Кто-нибудь знает, каков наилучший способ реорганизации хранилища, чтобы в этом случае не отображать эти сообщения?

Спасибо!

Ответы [ 3 ]

1 голос
/ 15 декабря 2009

Вы не можете избежать «удаленных» сообщений, если удаляете вещи из хранилища: -)

То, что вы, вероятно, должны были сделать (хотя теперь потребовалась бы довольно серьезная операция с деревьями), заменяет все файлы из ProjectName на файлы из ProjectName v2.0. Если вы запустили v2.0, все еще работая над v1, то вам нужно будет выполнить ветвление в точке, где вы запустили 2.0. В общем, было бы довольно неловко пытаться исправить, особенно если коммиты требуют разделения или реорганизации, и если нет четкого пути между v1 и v2.

0 голосов
/ 15 декабря 2009

Когда вы удалили v1 и переименовали v2, вы делали 'rm -r ProjectName' и 'mv ProjectName2.0 ProjectName' или вы делали 'git rm -r ...' и 'git mv ...'?

Это звучит как первое, и в этом случае вам нужно обновить git, чтобы сообщить ему, что вы внесли все изменения. Один из способов сделать это - сделать «git add ProjectName», а затем «git add -u». Это обеспечит обновление индекса так, что 1: все добавленные или удаленные файлы в ProjectName будут распознаны, и 2: все измененные или удаленные файлы во всем хранилище будут распознаны.

В качестве альтернативы, 'git add -A' будет гарантировать, что индекс отражает текущее состояние рабочего каталога, если у вас нет каких-либо предложений в вашем файле .gitignore.

Обновив индекс, вы можете зафиксировать как обычно.

Если у вас возникли проблемы с пониманием концепции индекса в git и тем, как добавление / удаление файлов отличается от более простых VCS, которые не имеют такой концепции, вы можете попробовать прочитать http://git.or.cz/gitwiki/WhatIsTheIndex или , если у вас есть больше времени, http://tom.preston -werner.com / 2009/05/19 / the-git-parable.html . Последний относится к индексу как «промежуточная область», что является разговорным термином, который становится довольно распространенным, поскольку многие люди находят его более наглядным.

0 голосов
/ 15 декабря 2009

Если вы хотите удалить старый проект из истории git, попробуйте запустить его через filter-branch: http://kernel.org/pub/software/scm/git/docs/git-filter-branch.html

Позволяет переписывать историю изменений git, переписывая ветви, упомянутые в, применяя пользовательские фильтры к каждой ревизии. Эти фильтры могут изменять каждое дерево (например, удаление файла или запуск перезаписи perl для всех файлов) или информацию о каждом коммите. В противном случае вся информация (включая исходное время фиксации или информацию о слиянии) будет сохранена

В Github есть пошаговое руководство, в котором рассказывается, как удалить файл из истории: http://github.com/guides/completely-remove-a-file-from-all-revisions

Если вы не хотите удалять проект из истории, вам нужно выполнить что-то вроде следующего рабочего процесса:

  • ответвление текущего кода
  • вернуть историю основной ветки (т.е. master) до точки, где вы пытались очистить
  • удалить старый проект с помощью `git rm` и зафиксировать удаление
  • переместить новый проект в старое имя проекта с помощью `git mv` и & commit
  • теперь вы можете объединить любые нерешенные изменения, которые у вас есть, в ветке, созданной в начале рабочего процесса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...