2015-11-23 2 views
2

Меня интересует только как git «скрывает» файлы между веточками. Я искал его, но ничего не нашел. Итак, позвольте мне описать то, что я имею в виду:Как git «скрывает» файлы между ветвями?

У меня есть филиалам master && red

Переключитесь на red филиала и создать новый файл, а также совершить его

git checkout red 
touch test.js 
git add test.js 
git commit -m "Added new file for test" 
ls 

И я получил список файлов в моем Сделки рЕПО на red филиале

README.md app.js index.html нового-red.js Нового test.js red.js test.js

Теперь переключатель к master ветви и мозоль ls

git checkout master 
ls 

файлы на главной ветви

README.md app.js index.html нового red.js новый- test.js red.js

Так как git «скрывает» файлы test.js между ветвями?

Thanks

+0

Что вы имеете в виду? Git делает * не * скрывает файлы. Он * заменяет * существующие файлы в вашем рабочем каталоге содержимым филиала. Вот почему git не позволит вам перейти от ветви с неустановленными изменениями - изменения будут перезаписаны и потеряны –

+0

@PanagiotisKanavos ok, как git скрывает содержимое между ветвями? В красной ветке я совершил файл test.js, но didint объединил его с master, как git скрывает файл test.js для главной ветки? –

+0

Я только что сказал, что это * не *.Он удаляет ваши старые файлы и записывает новые поверх них. Я подозреваю, что вы на самом деле спрашиваете: «Где git хранит файлы репозитория»? Ответ «в папке .git, которую вы никогда не должны касаться». Возможно, вы должны проверить учебник по Git? –

ответ

2

Что вы хотели спросить: «Где Git хранит все данные, которые в настоящее время не находятся в дереве рабочего каталога?».

Короткий ответ: «В каталоге .git».

Для получения длинного ответа см. documentation.

+0

Просто интересно, что это добавляет, что не содержится в моем ответе? – houtanb

+0

@HBHB my 2c: ваш ответ говорит, что git не скрывает файл. На самом деле можно утверждать, что это именно то, что он делает. Вместо того, чтобы противоречить OP, этот ответ пересматривает вопрос, что само по себе помогает добавить ясность. – GreenAsJade

0

Git не скрывает файл. Каждая ветвь представляет собой определенную разработку История и файлы, которые вы видите в своем репозитории git, восстанавливаются из истории git (находится в вашем каталоге .git), что приводит к вашей текущей фиксации. Если текущая фиксация находится на другой ветке, она просто воссоздает файлы, которые существуют в этой фиксации в этой ветке.

Немного касательный: вы видите эти файлы, потому что у вас есть не голый репозиторий с GIT_WORK_TREE, установленным в ту же папку. Этот working tree может быть расположен в другом месте на вашем компьютере, и если вы хотите изменить текущую фиксацию репозитория git, файлы в этом рабочем дереве будут обновлены.

Для получения дополнительной информации о том, как git восстанавливает файлы, см. this.

+0

Все время git воссоздает файлы, зависит от текущих ветвей? –

+0

@ nAz Я не понимаю ваш вопрос. Когда вы изменяете фиксацию, будь то другая ветка или нет, git воссоздает файлы, которые существовали при этом коммите. Файлы не скрыты. Что было (и отслежено) до того, как было удалено, и файлы, которые существовали в коммите, который вы только что проверили, написаны. – houtanb

+0

Ответ на вопрос @nAz - «да». Каждый раз, когда вы меняете ветвь, git _recreates_ файлы в рабочей копии. – GreenAsJade

Смежные вопросы