Showing posts with label git. Show all posts
Showing posts with label git. Show all posts

Thursday, September 20, 2012

Git: Как пофиксить detached HEAD

Если git при комите ругается, что у вас detached HEAD, то пофиксить можно 4-мя командами:

git branch temp
git checkout temp
git branch -f master temp
git checkout master

И, опционально,
git branch -d temp

Что при этом происходит
1. создаем временную ветку с текущего положения HEAD
2. переключаемся на временную ветку
3. сбросить master до позиции в temp
4. переключиться на мастер
5. удалить временную ветку

Tuesday, December 06, 2011

Как мигрировать локальный репозиторий SVN на Git/Github

Git предоставляет мост через который можно работать с SVN как с удаленным репозиторием, при этом пользуясь практически всеми возможностями, которые предоставляет Git. Все, что нужно сделать - это научиться пользоваться командой git svn которая идет вместе с инсталляцией клиентской версии git. С миграцей репозитория на Git\Github тоже ничего не должно быть сложного. Достаточно добавить удаленный репозиторий после импорта SVN в локальный проект и набрать команду git push. Эх, если бы все было так просто...Расскажу как у меня это получилось с обходом одной грабли, на которую пришлось наступить.

Для начала устанавливаем клиентскую версиою Git. Я использовал msysgit версии 1.7.8-preview.

Предположим, что наш локальный SVN репозиторий находится в папке C:\workspace\Repository и свн установлен на машине.

Открываем командное окошко (cmd) и набираем команду

svnserve --daemon --root C:\workspace\Repository

Этим мы запустили сервер SVN, который дает нам возможность удаленного доступа к нашему репозиторию по протоколу svn, что даст возможность Git его скачать. Теоретически и документация говорит, что git svn должен понимать протокол file://, но если бы все было так просто... на StackOverflow нашел свою проблему с решением

Далее создаем новую папку в которой будет создан локальный слепок SVN репозитория в GIT формате (в моем случае C:\workspace\git-repository)

Запускаем Git-bash в этой папке из контекстного меню Windows Explorer. И запускаем команду
$ git svn clone svn://localhost --no-metadata

Чем больше репозиторий, тем дольше она будет выполняться. В моем случае на 100 комитов она выполнялась минут 5. После чего у меня появилась папка localhost с содержимым svn репозитория и отображением всего SVN репозитория в локальном репозитории GIT.
Перехожу в эту папку
$ cd localhost/

и связываю локальный репозиторий с удаленным репозиторием Github, который я заблаговременно создал:
$ git remote add origin git@github.com:tdd-elevator-training/elevator.git

после чего мне осталось залить (пушнуть) изменения на сервер, что я с радостью и делаю вот таким способом:
$ git push -u origin master

Все, мой SVN репозиторий полностью со всей историей и даже с сохраненными авторами начальных комитов в Github.

Monday, December 05, 2011

Как быстро настроить Github в Intellij IDEA

Недавно вышел релиз кандидат Intellij IDEA 11. В числе многих украшательств и фишечек JetBrains расширил поддержку популярного вершн контрола Git/Github. Мне очень захотелось попробовать поработать с Git, но помня нашу неудачную с Сашей попытку настроить Github проект из Intellij IDEA, я предварительно вооружился документацией на русском языке после чего начал настраивать Git репозиторий. Здесь я расскажу как у меня это получилось и на какие грабли наступил.

Шаг 1. Установка Git клиента.

Следуем инструкциям по инсталляции с Github. Скачиваю msysgit (версия Windows здесь http://code.google.com/p/msysgit/downloads/list). Дальше все как по картинкам в инструкции.
Затем добавил переменную среды GIT_HOME, которая указывает куда установил Git:


после чего добавил в Path:
Шаг 2. Создаем репозиторий и публичный ключ

У нас уже есть учетная запись на Github, я использую ее и создаю репозиторий под названием "test".
Для того, чтобы сервер Git смог меня аутентифицировать (узнать) мне нужно сгенерировать rsa ключ. Делается это так:
Запускаю Git-bash из контекстного меню Windows Explorer (откуда запустил 0 не важно)
Знакомлю git клиента с параметрами пользователя, которые он будет использовать в поле Author для чего ввожу команды:
Затем генерирую файл ключа:
После того как я ввел пароль мне генератор сказал где лежит файл ключей:
Мне нужен публичный ключ, который находится в ./ssh/id_rsa.pub. Открываю этот файлик и копирую содержимое в буфер обмена (Ctrl+C).

Открываю страничку настроек моего акаунта в Github (Account Settings) и добавляю новый ключ в секции SSH Public Keys:

Все, теперь сервер должен меня узнать.

Шаг 3. Создаем проект и начинам комитить

Открываю скачанную недавно Intellij IDEA 11 RC, кликаю на Check out from Version Control и выбираю Git в выпадающем меню:

в окне Clone Repository ввожу Git Repository URL, Parent directory и Directory name:
Узнать Git Repository URL можно настройках репозитория, но я просто скопировал со страницы с инструктажем по настройке локального репозитория:
После того, как склонировался репозиторий создал проект и добавил в него README.txt файлик. Я готов комититься. Жимаю и выбираю комит с пушем (Commit and Push...) из окошка Commit changes:
Важный момент: окне просмотра Git push IDEA показывает, что master - это не "tracked" бранч. Т.е. он не связан с удаленным репозиторием. Почему так получилось - не понятно, но когда я экспериментировал с другим сервером Git хостинга unfuddle, все заработало сразу. В общем для того, чтобы это "полечить" достаточно выбрать галочку "Push current branch to alternative branch":
Все, мои изменения на сервере. Могу в этом убедиться просмотрев логи:
не верю своему счастью, меняю README.txt и делаю комит в идее (без пуша). После чего меняю еще раз и комичу с пушем:
Master теперь связан с удаленным репозиторием, о чем красноречиво говорит надпись master -> origin/master. Origin - это псевдоним удаленного репозитория. Git дает этот ему этот псевдоним по умолчанию. Это удобно, если работать с несколькими репозиториями одновременно - но это уже совсем другая история :)

Кстати, чуть не забыл проверить дошли ли мои изменения:


Если не работает 

При попытке сделать update выдает ошибку идентификации или просто долго висит

Запусти git-bash и посмотри где он думает находится HOME директория пользователя (команда cd ~, затем pwd). Затем убедись что в этой директории находится папка с ключами .ssh



Добавь переменную окружения HOME, которая указывает на home директорию из git-bash. В моем случае уже были установлены переменные HOMEDRIVE и HOMEPATH, которые указывали на Z:\
Перезапусти IDEA