2009-11-18 3 views
1

мастера филиал имеет следующие файлы и папки (упрощенные):git checkout удаленная ветка показывает посторонние файлы?

C:\Local\TickZoom\Project>ls 
file.txt   name.txt  public 

общественного филиал отслеживаемые хранилища поставщика и был поддерево объединено в общей папке в главной ветке выше. Общественность имеет три папки только (упрощенно):

C:\Local\TickZoom\Project>ls 
platform providers www 

При переходе от общественности освоить он ведет себя правильно.

Однако при переходе от мастера к публике происходит странная вещь. Он имеет все файлы и папки как в сочетании:

C:\Local\TickZoom\Project>git checkout public 

C:\Local\TickZoom\Project>ls 
file.txt name.txt public 
platform providers www 

Однако, проверяя состояние GIT говорит ничего не изменилось.

Я обнаружил, что «git reset --hard» исправляет общедоступность.

CLUE: Кажется, что это происходит только после совершения нового фиксации . Делает ли git какое-то автоматическое слияние?

После того, как «git reset --hard», контрольно-пропускной пункт для управления и обратно , чтобы общественная работа прекрасна, даже если повторно.

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

Теперь я не могу воспроизвести его. Но это произошло дважды.

Еще один CLUE - первый раз, когда я сбросил git - hard , он жаловался на блокировку файлов процессами.

После того, как программы защиты были закрыты, сброс git -hard преуспел, а затем проверка работала между двумя ветвями.

Так что проверка путается заблокированными файлами и «тихо» не работает? Было бы лучше, это проблема: терпит неудачу так же, как сброс git -hard, чем просто сообщение успех и смятое рабочее пространство.

Любая другая мудрость или варианты установки на git checkout, чтобы избежать этого будет оценен.

Wayne

+0

Хорошо, теперь возникла проблема. Как исправить? Проблема в том, что в подпапках есть файлы с игнорированием. git правильно делает checkout, но оставляет все проигнорированные файлы, и если несколько каталогов вниз, это оставляет все директивы, чтобы добраться до них. Я пробовал git clean -f, и он все еще оставляет файлы. Как очистить неиспользуемые файлы при переключении между ветвями? – Wayne

ответ

3

использовать это для решения

GIT чистого -f -d -X

Это очищает только файлы, игнорируемые вашего .gitignore и все пустые каталоги, которые их содержат.

Теперь я делаю это в скрипте перед проверкой ветвей, которые из совершенно разных хранилищ.

Это не такая проблема при переключении ветвей между одним и тем же программным обеспечением.

Wayne

+1

В комментарии, который вы оставили, чтобы уточнить свой вопрос, вы спросили: «Как очистить * не отслеживаемые файлы при переходе между ветвями?» В верхнем регистре X опция не очищает «не отслеживаемые» файлы, а только очищает игнорируемые файлы. В нижнем регистре x опция очищает «не отслеживаемые» файлы (включая игнорируемые). Вот почему мой ответ предложил нижний регистр x. :) –

6

Вы можете очистить все неотслеживаемых файлов с помощью:

git clean -dfx 

Убедитесь, что там на самом деле нет никаких неотслеживаемых файлов, которые вы хотите сохранить, прежде чем запускать эту команду!

+0

Заметьте, я обнаружил, что в верхнем регистре X только очищается от игнорируемых файлов и оставляет какие-либо необработанные файлы в одиночку - гораздо безопаснее. В нижнем регистре x удаляются все проигнорированные и не проверенные файлы - как вы сказали - опасны. Итак, ваш восклицательный знак заслужил! – Wayne

+0

Это работает, но если у вас есть такие вещи, как 'bower_components',' node_modules' или 'platform', они также будут удалены. Вы точно получите то, что произойдет, если вы скроете клонирование с нуля – Deminetix