9

Первый день работаю с GIT (BitBucket).

Возник вопрос как создать и закоммитить директорию. Добавил в основную папку проекта (на локале) директорию. Потом в терминале написал:

git add *
git push

и в итоге ничего не изменилось. Подскажите, что я делаю не так?

Nick Volynkin
  • 34,094
DarkVss
  • 925
  • 5
    если директория пустая, то ее добавить нельзя. Так задумано. Если директорию все же нужно добавить, то в не создается пустой файл с именем вида .touch, .gitkeep, .do_not_remove. – KoVadim Jul 22 '15 at 11:17
  • ручками это все делается(файл тоже приходиться ручками впихивать?-ибо при попытке запихнуть в добавленную папку файл, он ругался на то что это не возможно). а через терминал можно как-то все сделать? я имею ввиду начиная от создания папки и заканчивая пулом. – DarkVss Jul 22 '15 at 11:29
  • @DarkVss: через терминал можно сделать все ))) сейчас в ответ добавлю. – Nick Volynkin Jul 22 '15 at 11:36
  • Спасибо за помощь,ребята=) – DarkVss Jul 22 '15 at 12:11

3 Answers3

11

Чтобы git сохранил директорию:

  1. Она должна быть непустой.
  2. Нужно добавить её содержимое и сделать коммит.

1. Директория должна быть непустой

  • Добавить пустую директорию нельзя. Команда git add «видит» только файлы и пути, в которых они лежат.
  • Чтобы сохранить пустую директорию, создайте в ней пустой файл .gitkeep и добавьте его в git.

Почему git так работает?

Потому что он хранит данные в виде следующих объектов:

  • Blob, блоб (от Binary Large OBject) — бинарный архив файла.
  • Tree, дерево — текстовый список содержимого директории: файлов (блобов) и других директорий (деревьев).

Дерево не может быть пустым — by design, так устроен алгоритм. Поэтому пустую директорию нельзя добавить. Чтобы её наполнить, достаточно создать в ней файл. Обычно такой файл называют .gitkeep, но допустимо любое имя.

Например, в директории есть файл и ещё пара директорий, одна из которых пуста. Вот что будет после команды git add .:

на диске:       в индексе git:
.               tree
├── dir1        tree
│   └── file1   blob
├── dir2        (ничего)
└── file2       blob

Чтобы узнать про другие объекты и подробности, читайте Git from the bottom up.

2. Нужно сделать коммит

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

Для добавления используйте git add ., а не *.

Nick Volynkin
  • 34,094
  • 1)как потом подняться обратно? 2)как убрать следующее-после создания файла открывается консольный редактор.там что-то пишешь,если закрыть-все стереться.как сохранить не понятно... объясните пожалуйста если не сложно – DarkVss Jul 22 '15 at 11:43
  • @DarkVss: если Vim, то выйти из него: Esc — :wq — Enter. Подробнее: http://stackoverflow.com/a/30710567/2790048 – Nick Volynkin Jul 22 '15 at 11:54
  • @NickVolynkin, а у нас есть где-нибудь вопрос+ответ, компактно раскрывающий суть stage area/index? – aleksandr barakin Jul 22 '15 at 11:57
  • @NickVolynkin, ну, возможно, имеет смысл разложить на несколько вопросов. про саму концепцию («промежуточный аэродром», в отличие от stash — «запасного аэродрома») отдельно, про работу с ним (добавление файлов, патчей, удаление файлов, патчей) — отдельно. может быть, даже ещё мельче, если получится. – aleksandr barakin Jul 22 '15 at 12:02
  • vim,но чего-то не работает нормально или я тупой просто...а в место него можно повесить что-то более демократичное?(на мест о редактора,например блокнот?))))) – DarkVss Jul 22 '15 at 12:05
  • @NickVolynkin, да, наверно, пора. сейчас попробую сделать. – aleksandr barakin Jul 22 '15 at 12:05
  • @NickVolynkin, ну, могу удалить. http://chat.stackexchange.com/rooms/26116/git--ru-so – aleksandr barakin Jul 22 '15 at 12:11
4

Добавьте файл .gitkeep (или любой другой) в Вашу директорию которая должна быть закомичена

Kromster
  • 13,809
username
  • 1,200
2

чтобы добавить подпапку (с файлами проекта) на контроль версий:

git add folder_name/

далее что вам нужно, git commit. git push....

Vlad Gor
  • 303