2016-08-26 4 views
2

Просто начинайте узнавать о git, и я люблю концепцию этого. Есть одна вещь, которая немного странна для меня до сих пор, что я не могу найти в поиске. Когда я набираю git checkout branchName, чтобы изменить любую ветку, которую я хочу, когда я смотрю на окно Finder, я могу визуально видеть, как файлы или папки появляются или исчезают в репо на основе того, в какой ветке я вхожу.Git - Где файлы идут, когда вы меняете ветки?

2 изображения ниже витрина, как я нахожусь в одной ветке, а затем перехожу в другую ветку (это от курса Lynda.com). На левой стороне отображается Finder и как исчезает папка _fonts, поскольку она отсутствовала в другой ветке.

Но где именно это (и другие файлы, которые имеют изменения)? Из того, что я вижу здесь, я не могу физически просматривать файлы из разных ветвей за один раз, но мне просто любопытно, где они действительно ходят в системе, когда я меняю ветви.

Inside one branch with a _fonts folder

Inside a different branch that does not have the _fonts folder

ответ

5

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

Да, вы можете сделать это

Вам просто нужно следить за этим:

Git выставил эту функцию еще в 2007 году под названием git workdir. Он находился под папкой git contrib уже много лет.

В версии git 2.5 он был выставлен как git worktree. Это позволяет вам работать одновременно на нескольких ветвях.

Как это сделать?

# create a new working directory 
# the path will be added and the given branch name will be checkout out 
git worktree add <path to the new working directory/ branch name> 

# now you have 2 folders with different branches in each one of them. 
# if you used something like `git worktree /tmp/aaa` than you will have 
# branch aaa checked out in the new folder and you can switch to any branch 
# you wish 

Каждый worktree имеет свои собственные 3-состояния так вы не можете той же отрасли на нескольких worktrees.

, например:

git worktree add <second path> 

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

git worktree создаст две отдельные рабочие папки, отделенные друг от друга, указывая на один и тот же репозиторий.

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

Вот пример того, как создать новую worktree и каков результат этого:

enter image description here

2

Git называет файлы, которые вы можете увидеть "working tree". Наряду с этим рабочим деревом Git создает папку с именем .git/, где хранится почти вся конфигурация и данные репо. Если вам интересно, вы можете открыть эту папку для просмотра с помощью Finder на OS X с помощью команды open или просмотреть ее с помощью своего терминала (protip: передать -a команде ls для отображения скрытых файлов). Сразу же некоторые из внутренних действий git становятся очевидными, поэтому я определенно рекомендую вам проверить это самостоятельно.

В этой папке находится папка objects/, где Git хранит файлы, изменения в файлах, фиксации и отношения. Вы можете изучить их содержимое с помощью git cat-file. Для получения дополнительной информации об этих объектах см. Главу из книги; https://git-scm.com/book/en/v2/Git-Internals-Git-Objects.

Команда git обеспечивает приятный интерфейс для работы с этими объектами и другим содержимым этой папки, чтобы вы могли легко оценить и управлять состоянием рабочего дерева.

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

+1

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

+0

Да, ты прав. Это был дрянной ответ. Я приложил больше усилий, чтобы объяснить, что еще происходит в '.git /', и как получить более глубокий взгляд на объекты. Что еще, по вашему мнению, может улучшить? – pnovotnak

+0

@pnovotnak чтение «Git Internals» - лучший ответ на многие вопросы здесь. – ElpieKay

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

  • Нет связанных вопросов^_^