Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопросы по Гит, после SVN

28.07.17 22:46
Re: Вопросы по Гит, после SVN
 
MrSanders старожил
в ответ AlexNek 28.07.17 19:15
Use the --depth option in git clone

Ну, давайте я поясню. Если выстрелить себе в ногу, не надо удивляться что ходить неудобно :)

depth "обрезает" историю. При depth 1 копируется текущее состояние master-а и всё. Никакой информации (вот тут не уверен на 100%, может информация "был коммит с комментарием" и будет, но не будет данных о состоянии проекта в этом коммите) о предыдущих коммитах. Работать с таким - вредительство. Используется в основном для автоматических сборок. Им история не нужна.

Ну и вариант, когда коллега залил баальшую ветку которая мне нафиг не нужна. Почему у меня стоит значёк , что информация доступна только на сервере?

А тут ответ сложнее.

1. Когда мы делаем git clone (без ограничения глубины!) мы копируем всё. (за исключением некоторых настроек, см. --mirror) Но. Локальные ветки не создаются.
Например. На сервере есть master и development после git clone делаем git branch и видим... Только *master. Но стоит сделать git branch -r как мы увидим и origin/master и origin/development.

Если хочется работать с другой веткой просто делаем git checkout development. Это создасть локальную ветку development, которая будет ссылаться на origin/development. Никакие данные при выполнении этой команды с сервера не копируются. Они уже у нас.

Если вы сделали git clone и после этого "стоит значёк , что информация доступна только на сервере" выбросьте нафиг этот гуй. Он тупой.

2. Склонировали репо и работали с ним какое-то время. Коллега заливает на центральную репо свою ветку. Локально у нас про нее нет никакой информации. Мы даже не знаем что она существует. Можно или сделать git fetch (забрать всю новую инфу с сервера, со всеми коммитами, новыми файлами и те пе, может длиться) или можем посмотреть а что там есть на сервере с помощью git ls-remote

Если в этом случае ваш гуй показывает "значёк , что информация доступна только на сервере", то он всё делает правильно. Посмотрел на удаленке и показал, но сам пока что ничего не скачивал.

Создает новый коммит, который выполняет такие же изсенения как и "копируемый".
где именно? В какой ветке?

В текущей.

СВН-вская копия получилась без веток в коммитах, просто идет одна длинная кишка, хотя по файлам видно что изменения исключительно в ветке, да и ветка моя, так именно и делал.

Тут или хреново сконвертировали (git-svn хорошо понимает свн-овские ветки) или есть недопонимание. Если параллельной разработки никогда не было (сделали ветку, поработали в ветке, потом замержили ветку назад в транк, при этом в самом транке никаких новых коммитов не было) то гитовский лог будет выглядеть как линия.
Может так понятнее... Если в svn было

trunk: A - B  -  -  -  F
            \         /
branch:      C - D - E


То в графе коммитов в гите вы увидите A- B - C - D - E - F

Но ветка "branch" будет на месте. Ее HEAD будет показывать на E (а master на F). Хотя не уверен, будет ли F присутствовать. Он в принципе не нужен...


А что говорит git branch -a?

 

Перейти на