Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Прочая документация (http://mangos.ytdb.ru/forumdisplay.php?f=33)
-   -   Git для новичков (статья) (http://mangos.ytdb.ru/showthread.php?t=891)

Konctantin 30.04.2010 08:51

Git для новичков (статья)
 
Работа с git для начинающих


Наверное не все знают, что такое git и с чем его едят.
git – это распределенная система контроля версий. Основные ее преимущества, лично для меня, распределенность и использование бинарных дифов, что упрощает работу с системой нескольких пользователей одновременно, и упрощает хранение бинарных файлов, ресурсов.

git используется во многих крупных проектах: Linux kernel, KDE и многих других.

Изначально git написал Linus Torvalds.

Генерация ключа:
Для того чтобы вы имели доступ до репозитария, необходимо сгенерировать ключ.
Для этого в консоли git пишем:
Код:

$ ssh-keygen -t rsa -C "tekkub@gmail.com" - Пишем это в консоле git (только подставить свой адресс)
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Tekkub/.ssh/id_rsa):  - просто жмем ентер
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Tekkub/.ssh/id_rsa.
Your public key has been saved in /c/Users/Tekkub/.ssh/id_rsa.pub.
The key fingerprint is:
e8:ae:60:8f:38:c2:98:1d:6d:84:60:8c:9e:dd:47:81 tekkub@gmail.com

и все, далее лезим в папку с профилем там будет папка .ssh находим в ней файл id_rsa.pub и его содержимое вставляем в ... как показано на рисунке
http://help.github.com/images/add_key.png

Создание нового репозитория

Создание нового репозитория – это наверное первая из задач, с которой сталкивается любой разработчик. К данной проблеме есть несколько подходов.

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

Во-вторых, можно создать открытый репозиторий, с которым смогут работать другие люди. Рассмотрим этот вариант. Предположим, что у вас есть сервер example.com и ваша рабочая машинка.

Для начала вам необходимо установить git. Сделать это можно как вручную скомпилировав его из исходных кодов, так и установив с помощью менеджера пакетов. Будем считать что с этой операцией вы уже справились.

Далее вам надо создать репозиторий. Предположим что вы будете хранить все git-репозитории в /var/git:

Код:

cd /var/git
mkdir example.git
git init --bare

Теперь у вас есть пустой git-репозиторий. Это, собственно говоря, все команды, которые требуется выполнить на сервере.

Теперь идем на вашу рабочую машину и пишем:

Код:

git init
git remote add origin ssh://username@example.com/var/git/example.git
touch changelog
git add changelog
git commit -a -m "Initital commit"
git push origin master

Этими командами мы создали новый репозиторий, связали его с основной веткой example.git, закомитили туда файл changelog и отослали это на сервер. В результате выполнения этих команд, вы должны увидеть чтото примерно такое:

Код:

Counting objects: 3, done.
Writing objects: 100% (3/3), 224 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://username@example.git/var/git/example.git
 * [new branch]      master -> master

Получение и оправка репозитория

Разумеется, после создания репозитория разумно узнать “а как же получить эти данные на свой компьютер?”.

Для данной операции используется команда clone. Она создает полную копию удаленного репозитория у вас. Под полной копией понимается именно полная копия, со всеми ветками, удаленными файлами и т.д.

Код:

git clone ssh://username@example.com/var/git/имя-репозитория
Разумеется, /var/git может меняться, в зависимости от того, где располагаются файлы данного репозитория на удаленной машине.
Обновление данных

С таким локальным репозиторием можно работать долгое время, однако, когда-то у вас все же возникнет необходимость передать сделанные вами изменения в удаленный репозиторий, чтобы результатами вашего труда могли воспользоваться другие участники разработки, и получить из удаленного репозитория новую версию. Для этого служат команды pull и push.

Код:

git pull
Данная команда получает обновленную версию из удаленного репозитория, при этом она проверяет на наличие различных проблем при объединении репозиториев и сообщает об этом.

Код:

git push
Данная команда целиком передает все сделанные вами изменения, уже закомиченные в локальный репозиторий, в удаленный репозиторий. Для передачи тегов необходимо использовать аргумент –tags

Код:

git push --tags
Базовые операции

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

Добавление списка файлов в комит:

Код:

git add file1 file2 ... fileN
Добавление всех недобавленных файлов в комит:

Код:

git add -a
Удаление файла из комита:

Код:

git rm file1 file2 ... fileN
Удаление файла из комита и с жесткого диска:

Код:

git rm -f file1 file2 ... fileN
Комит в локальный репозиторий (надо отметить, что в таком случае закомитятся только файлы, которые были обработаны с помощью git add/rm):

Код:

git commit
Комит всех изменений в локальный репозиторий:

Код:

git commit -a
Отмена всех изменений, сделанных в дереве, до состояния, которое было при последнем комите в локальный репозиторий( очень опасная команда, подумайте прежде чем пользоваться ею):

Код:

git reset --hard
Создание дифа относительно последнего комита:

Код:

git diff
Использование веток

Рано или поздно в любом проекте возникает ситуация, когда требуется заморозить изменения, но продолжать работать, а на замороженные изменения накладывать только баг-фиксы. Для этой цели служат ветви (branch)

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

Весь процесс делиться на несколько этапов

* создание удаленной ветки
* создание аналогичной локальной ветки
* переключение на созданную ветку

Процесс создания ветки на удаленном сервере

1. Создание удаленной ветки
Код:

  git push origin origin:refs/heads/new_branch
Можно проверить, все ли верно
Код:

git pull origin
Проверяем, создана ли удаленная ветка
Код:

git branch -r
2. Создаем локальную ветку, и закрепляем ее за удаленной
Код:

git checkout --track -b new_branch origin/new_branch
Теперь pull будет закреплен за новой веткой
Код:

git pull
Если вы совершили ошибку, то удалить ветку на сервере можно вот так
Код:

git push origin :heads/new_branch
Очень похоже, но лучше не путать.

Для открытия и закрепление новой ветки с другого места нужно выполнить два шага

1. Открыть удаленные ветки
Код:

git branch -r
2. Сделать checkout
Код:

git checkout --track -b new_branch origin/new_branch
Работа с тегами
Как правило, кроме веток разработчики используют теги – чтобы запомнить состояние кода в какой-то момент. Тег – это своеобразный слепок, точно идентифицирующий состояние кода. Гит умеет работать с подписанными GPG тегами и с неподписанными. Здесь я рассмотрю только неподписанные теги.

Для создания такого тега необходимо выполнить команду:

Код:

git tag <tag name>
Чтобы убрать тег необходимо выполнить:

Код:

git tag -d <tag name>
Для того, чтобы тег стал виден всем, необходимо отправить его в удаленный репозиторий:

Код:

git push --tags
Чтобы получить версию с конкретного тега необходимо создать от него локальную ветку и расчекаутить эту ветку:

Код:

git fetch origin tag <tag_name>
git branch <branch_name> <tag_name>
git checkout <branch_name>

Разумеется, в будущем эту ветку можно будет сделать глобальной и выслать в удаленной репозиторий.
Настройка git

Для ускорения некоторых операций и увеличения удобства работы можно провести пару настроек:

Настройка цветного вывода:

git config --global color.ui "auto"

Настройка имени пользователя и почтового адреса (между прочим, это хороший тон):

Код:

git config user.name "FirstName LastName"
git config user.email "user@example.com"

Ускоряем дифы и отменяем ограничение на количество потоков упаковки при push:

Код:

git config --global diff.renamelimit "0"
git config --global pack.threads "0"

Вместо заключения

Git – очень мощная и удобная система контроля версий. Для нее существует несколько GUI утилит, которые могут облегчить работу, несколько веб интерфейсов для мониторинга текущего состояния. В последнее время все большее кол-во проектов переходят на использование git, и это показатель того, что git успешно развивается и соответствует последним требованиям в области систем контроля версий.

Большое кол-во документации по использованию git можно найти в сети, в том числе и на официальном сайте

Продолжение следует...
Источник _http://blog.nsws.ru/rabota-s-git-dlya-nachinayushhix.html

Konctantin 07.06.2010 16:42

http://progit.org/book/ru/

Konctantin 08.07.2010 14:16

Еще одно руководство по git на русском языке.
http://freesource.info/wiki/RuslanHi...rmanual?v=b7s&

KiriX 26.03.2011 10:09

Что за проблема с гитом? При попытке обновить пишет:
fatal: git status --porcelain failed
Делаю git clean -f -x -d и git reset --hard, проходят команды нормально, делаю git gc - ошибка:
rm: cannot unlink `pack-99155867d32880251218103923abfc69f6e2ef2a.pack': Permission denied
Репозитория локальный, изменений много, терять не хочу, но и без обновления остаться тоже не улыбается, что можно сделать?

LordJZ 26.03.2011 18:48

unlink=удалить, что-то с правами доступа случилось?

KiriX 26.03.2011 23:48

Нашёл, удалил вручную. git gc теперь работает нормально, но обновляться по прежнему не даёт с ошибкой fatal: git status --porcelain failed =(
Какие проблемы досутпа на винде по админом??? =(

Йоха 27.03.2011 19:20

какая винда ?

собственно можно попробовать заново установить права на папку и проверить на всякий случай владельца, и на всякий случай принудительно стать владельцем этой папки

ну и атрибуты файлов можно проверить -) мало ли что

KiriX 28.03.2011 21:04

Win7 - перекачал уже всё =)

Mayss 24.07.2011 20:41

Нужна помощь, разбираюсь в гит, вроде всё понятно кроме как добавления уже существующих файлов в гит, что я делаю...
В папке находится исходный код, в гит я пишу
Код:

$ cd E:/folder_project1
тем самым я переключаю гит на E:/folder_project1, далее мне нужно с этого проекта добавить все имеющиеся файлы в гит в репозиторий(сервера) я ввожу
Код:

$ git push origin master
у меня там только файл README(на сервире) и получаю ответ что Everything up-to-date, ясно что файл README уже загружен на сервер, но почему он не загружает файлы которые находятся помимо его в E:/folder_project1 ? :(

Lordronn 24.07.2011 21:08

http://code.google.com/p/tortoisegit/

KiriX 25.07.2011 08:21

Если консолью добавлять файл, то сначала создаём файлы.
Потом "git add ."
Потом "git commit -a -m "Dеscription""
И только потом "git push -u origin master"

Mayss 25.07.2011 11:01

Цитата:

Сообщение от KiriX (Сообщение 24263)
Если консолью добавлять файл, то сначала создаём файлы.
Потом "git add ."
Потом "git commit -a -m "Dеscription""
И только потом "git push -u origin master"


А ещё вопрос, а если мне нужно будет потом обновить то что я "добавил, написал" в Visual Studio, то что нужно сделать? git push ?

KiriX 25.07.2011 11:16

Цитата:

Сообщение от Mayss (Сообщение 24266)
А ещё вопрос, а если мне нужно будет потом обновить то что я "добавил, написал" в Visual Studio, то что нужно сделать? git push ?

Вносишь изменения в файлы, потом git commit -a -m "Описание коммита", и только потом заливаем в публичный репозиторий командой git push -u origin master
Основное правило таково - сделал изменения, закоммитил в локальный репо - запушил в сеть.

Medivh 26.07.2011 20:29

Вложений: 1
Вот еще так на заметку Git cheat sheet

Com 28.07.2011 17:20

что нада сделать что бы открылось окно :
http://help.github.com/images/add_key.png?

Den 28.07.2011 17:24

Account Settings->SSH Public Keys.

RomanRom2 31.07.2011 20:14

вот в который раз сталкиваюсь с такой ситуацией. например вот репозиторий JavaEmu. делаю pull (в черепахе GIT Sync, затем кнопка pull слева внизу), оно мне выдает окошко с логом, в котором:


Код:

git.exe pull -v  "origin"

From git://github.com/stormcore/storm
 = [up to date]      master    -> origin/master
Updating 0300805..eef4f77
error: Entry 'src/org/stormcore/authserver/AuthCodes.java' not uptodate. Cannot merge.

почему сломалось? ничего с кодом не делал, не правил, не открывал, даже не смотрел... как это лечить? постоянно такая фигня, особенно я заметил тогда, когда долго не обновляешься с репозитория. в данном случае последний раз апдейт делал дня 3-4 назад. ну это ж безобразие какое то... и кроме как сносом всего репозитория и скачивания его заново я не нашел способов.

и второй вопрос: как посмотреть урл репозитория? ну конечно кроме как руками залезть в файл projects\git\stormcore.git\.git\config. как это сделать из черепахи?

rsa 01.08.2011 19:36

Цитата:

Сообщение от RomanRom2 (Сообщение 24435)
error: Entry 'src/org/stormcore/authserver/AuthCodes.java' not uptodate. Cannot merge.

почему сломалось? ничего с кодом не делал, не правил, не открывал, даже не смотрел... как это лечить?

под виндой это результат деятельности некоторых кривых антивирусов.

RomanRom2 01.08.2011 22:57

хмм, возможно. установлен microsoft essentials... или как там его...

Most 01.09.2011 23:30

где-то читал что можно редактировать уже закоммиченые изменения (коммиты) на сайт Знает кто эти команды?:mda:

PSZ 02.09.2011 08:35

http://progit.org/book/ru/ch2-4.html ;)

lovepsone 13.10.2011 14:12

люди как переключится на русский язык?? что-то я не могу найти!

Time Lords 13.10.2011 16:33

Теперь гит хаб поддерживает только английский язык.


Текущее время: 04:05. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS