Архив метки: console

Git, краткий справочник команд

Введение

Эта статья является продолжением предыдущей статьи Git, краткая теория.
Сегодня мы рассмотрим работу с Git на практических примерах. (Используется Git версии 1.7.8.msysgit.0)
В Git есть хорошая практика, которая рекомендует перед началом работы с репозиторием представиться ему, указав своё имя и электронный ящик для обратной связи. Поэтому работу с Git мы начнём с описания команд работы с конфигурацией Git
Сделаю важное замечание, я не буду углубляться во всё многообразие способов вызова той или иной команды Git, наоборот — я приведу конкретные команды для получения нужного результата.

 Настройка Git-репозитория (git config)

Как говорилось в прошлой статье, настройки Git придерживаются стандартной архитектуры настроек Linux. Настройки могут быть: локальные (—local), пользовательские (—global), системные (—system).
Настройки распределены по секциям, подсекциям и имени параметра:

section.subsection.name = value

В файле конфигурации эти параметры располагаются следующим образом:

[section "subsection"]
    name = value

Все составляющие имени параметра разделяются точкой.
Подсекция может состоять из любого кол-ва подсекций:

section.subsection1.subsection2.subsectionN.name = value

Но в файле настроек всё выглядит точно так, как и раньше:

[section "subsection1.subsection2.subsectionN"]
    name = value

Справка

git help config
получить справку по работе с командой git config

Чтение списка настроек

git config -l

весь список настроек, применяемых для текущего репозитория (сумма всех уровней настроек)

git config —local -l

список только локальных настроек репозитория из файла .git/config

git config —global -l

список пользовательских настроек из файла ~/.gitconfig (Заметка: в Windows путь к домашней папке можно явно указать через переменную окружения $HOME)

git config —system -l

список системных настроек из файла /etc/gitconfig

cat .git/config
находясь в папке репозитория можно просто вывести файл настроек (команда cat не относится к git)

Добавление настроек

git config [—system | —glogal | —local] —add имяСекции.имяПеременной значениеПеременной

общий синтаксис добавления нового параметра в файл конфигурации. По умолчанию новый параметр добавляется в —local, если не указанного другого назначения.

git config user.name YourName
git config user.email YourEmail@email.x

добавить настройку в локальный конфигурационный файл, атрибут —add может быть опущен, хотя я его пишу для наглядности. Смотреть следующий пример для подробностей.

git config —add user.name YourName
git config —add user.email YourEmail@email.x

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

git config —global —add user.name YourName
git config —global —add user.email YourEmail@email.x

теперь информация об имени и эл. ящике записана в ~/.gitconfig, и будет применяться автоматически для всех репозиториев текущего пользователя системы.

git config —global —add user.name «YourName YourSurname»
используйте двойные кавычки, чтобы использовать пробелы внутри значения параметра.

Чтение отдельной настройки

git config —get user.name
вернёт значение настройки user.name, которая применяется к текущему репозиторию

Поиск отдельной настройки

git config —get-regexp regexpName [regexpValue]

возвращает список настроек, удовлетворяющих установленным регулярным выражениям. regexpName — регулярное выражение для имени параметра. regexpValue — регулярное выражение для значения параметра.

git config —get-regexp user

вернёт все настройки, в имени которых встречается слово «user».

git config —get-regexp ^user

вернёт все настройки, имя которых начинается на «user». Говоря иначе — вернёт все настройки из всех секций [user].

git config —global —get-regexp ^user

получить список настроек секции «user» только из файла пользовательских настроек ~/.gitconfig

git config —global —get-regexp remote
получить информацию о секциях «наблюдения» и ассоциациях текущих веток с удалёнными ветками

Создание Git-репозитория (git init)

Команда git init создаёт новый репозиторий

git init

создать «простой» репозиторий в текущей папке. Это основной репозиторий, с которым нам предстоит работать.

git init —bare

создать «голый» репозиторий в текущей папке (используется как централизованное хранилище при централизованном стиле разработки).

git init repo

создать новую папку repo в текущей папке и создать в ней репозиторий

git init —bare repo
аналогично предыдущему примеру, но создаётся «голый» репозиторий

Состояние репозитория (git status)

Команда git status позволяет узнать текущее состояние репозитория.

git status
показать текущее состояние репозитория

Подготовка файлов к фиксации (git add)

Команда git add добавляет файл или группу файлов в index (staging area). (В дальнейшем добавленные файлы могут будь зафиксированы в репозитории командой git commit

git add .

добавить все файлы и папки текущей директории в index (staging area)

git add path/to/file1
добавить только один файл (или папку) в staging area

Фиксация изменений (git commit)

Команда git commit переносит изменения из index (staging area) в local repo.
После оп
ерации фиксации вам необходимо заново заполнять область index (staging area)

git commit -m «Комментарий к фиксации»

фиксирует изменения, добавленные в staging area, в репозитории. Заметьте, чтобы зафиксировать изменения, их надо сначала добавить в staging area командой «git add .«.

git commit -a -m «Комментарий к фиксации»
фиксирует все изменения, сделанные в working directory. Особенность этой команды в том, что перед ней не нужно выполнять команду «git add .» (это не распространяется на новые файлы, которые ещё никогда ранее не добавлялись).

Возврат к любой фиксации (git checkout)

Команда git checkout позволяет загрузить любое состояние репозитория в working tree.
При возврате к фиксации, work tree переходит в состояние на тот момент фиксации: исчезают файлы, которых не было в тот момент, появляются файлы, которые были на тот момент. (Заметка: checkout можно выполнить, только тогда, когда у вас нет никаких изменений в текущем состоянии working tree. В ином случае вам следует их зафиксировать или отказаться от них).

git checkout nameBranchOrCommit

где nameBranchOrCommit — либо первые четыре (или более) символов имени фиксации, либо имя ветки.
Имя фиксации — это сорока символьная строка, например: b4d470fc242c41d1e270a4041edf673586f8325a

git checkout b4d4

переключиться на фиксацию с именем, начинающимся на «b4d4». Заметка: при таком переключении у вас меняется текущая ветка на ветку «(no branch)». Заметка: вы можете указать имя фиксации, которая располагается в любой ветви и вы будете перенесены на эту точку фиксации.

git checkout master

переключиться на ветвь master (переключение происходит на верхушку ветви)

git checkout master~1

переключиться на одну фиксацию назад относительно верхушки ветви master

git checkout head~1

переключиться на одну фиксацию назад относительно текущего вашего положения.
Заметка: при каждой операции checkout ссылка head указывает на текущее положение.
Заметка2: не рекомендуется создавать ветвь с одноимённым названием head, т.к. head — это ссылка на текущее состояние.

git checkout b4d47~2

переключиться на две фиксации назад относительно фиксации с именем, начинающимся на «b4d47».

git checkout -b branchName nameBranchOrCommit
переключается на фиксацию nameBranchOrCommit и тут же создаёт от неё новую ветвь branchName и переключается на эту ветвь.

Работа с ветвями (git branch)

Команда git checkout обеспечивает работу с ветвями. Просмотр, создание и удаление ветвей разработки

git branch

просмотреть список существующих ветвей и узнать какая ветвь выбрана текущей

git branch -r

просмотреть список удалённых ветвей (ветвей из репозиториев, за которыми мы «наблюдаем»);

git branch branchName

создать ветвь с именем name. Создание ветви не приводит к переключению в эту ветвь, для этого используйте команду git checkout branchName. Созданная ветвь ответвляется от текущего состояния репозитория.

git branch -d branchName

удаляет ветвь branchName. Если ветвь ещё не была с лита с основной ветвью, то git предупредит об этом и удаления не будет

git branch -D branchName
удаляет ветвь branchName, даже если вы ещё не сливали её изменения с основной ветвью

Обзор изменений (git diff)

Команда git diff позволяет увидеть изменения между разными состояниями фиксаций, или между текущими изменениями и последней фиксацией.

git diff

показать изменения между work tree и index (staging area)

git diff —cached

показать изменения между index (staging area) и local repo

git diff master~2..master

показать суммарные изменения, произошедшие при перемещении от фиксации master~2 к фиксации master.
Заметка: если вы только добавляли текст, то будут отображаться «плюсики» в начале добавленных строк.

git diff master..master~2

показать суммарные изменения, которые произошли при перемещении от фиксации master к фиксации master~2.
Заметка: в отличии от предыдущего примера, здесь будет показано, что строки были удалены — знаки «минуса» в начале строк.

</div >

git diff otherBranch..master
показать суммарные изменения между последней фиксацией в ветви otherBranch и последней фиксации в ветви master.
Заметка: возможно такое сравнение не будет иметь смысл, если ветви не имеют общего предка, но… всё на ваше усмотрение.

Обзор лога фиксаций (git log)

Команда git log позволяет увидеть историю фиксаций от начала до текущего состояния HEAD.

git log

показать историю фиксаций от начала до текущего состояния HEAD.

git log nameBranchOrCommit

показать историю фиксаций от начала до указанной ветви или имени фиксации

git log anyBranch~1

показать историю фиксаций от начала до предпоследний фиксации на ветви anyBranch

git log master~2..master

показать историю фиксаций от пре-предпоследней фиксации до последней фиксации по ветви master
Заметка: обратите внимание, что запись «git log master..master~2» не покажет ничего.

git log br1..master

покажет историю фиксаций от места ответвления ветки br1 (от ветки master) до текущего состояния по ветке master.
Заметка: ветка br1 должна быть ответвлена от ветки master

git log br1…master

покажет общую историю фиксаций от места ответвления ветки br1 до текущего состояния ветки master. В историю попадут как фиксации сделанные по ветке master, так и фиксации сделанные по ветке br1. Обратите внимание, что диапазон указан с тремя точками, именно это отличает данный пример от предыдущего.

git log HEAD

то же, что и «git log«, покажет историю фиксаций от начала до текущего состояния

git log FETCH_HEAD

покажет историю фиксаций от начала до состояний FETCH_HEAD
Заметка: состояние FETCH_HEAD становится доступным после выполнения операции git fetch или git pull.

git log HEAD..FETCH_HEAD

покажет историю фиксаций по текущей ветви начиная от места, где совпадают состояния HEAD и FETCH_HEAD, и до конца истории.

git log HEAD…FETCH_HEAD
покажет историю общую фиксаций от места, где совпадают состояния HEAD и FETCH_HEAD, и до конца истории.

Создание наблюдений (git remote)

Команда git remote применяться для создания «наблюдений» за другими репозиториями. Позволяет удобно сливаться с другими репозиториями.

git remote

выводит список существующих «наблюдений»

git remote add name path

добавляет новое наблюдение с именем name до репозитория, расположенного по пути path.

git remote rm name
удаляет наблюдение с именем name вместе с данными, которые были загружены в это наблюдение. (На репозиторий за которым «наблюдали» эта операция никак не влияет!)

Загрузка удалённого репозитория (git fetch)

Команда git fetch позволяет загрузить удалённый репозиторий в раздел «наблюдения» локального репозитория. Загрузить репозиторий — ещё не значит «слиться» с ним. Для слияния используется команда git merge.

git fetch

подгружает данные по текущей ветке из соответствующей ветки удалённого репозитория, или подгружает данные из соседней ветки локального репозитория

git fetch repo branch
подгружает содержимое ветки branch репозитория repo в объект состояния FETCH_HEAD.

Слияние двух состояний (git merge)

Команда git merge выполняет слияние двух состояний HEAD и FETCH_HEAD в новое HEAD состояние. Если происходит конфликт изменений, то эти файлы выходят из index (staging area), до тех пор, пока вы не исправите конфликт и не поместите их обратно в index командой «git add .«.
Команда слияния всегда занимает отдельную фиксацию, при слиянии не допускается изменение каких-либо файлов

git merge branch
слить ветку branch с текущей веткой.

Обновление репозитория (git pull)

Команда git pull выполняет подгрузку удалённого репозитория и производит слияние с ним. Данная операция аналогична последовательному выполнению двух операций: git fetch и git merge.

git pull
обновить текущую ветку репозитория до состояния другой локальной или удалённой ветки репозитория

Клонировать репозиторий (git clone)

Команда git clone создаёт копию репозитория и устанавливает настройки для наблюдения за оригинальным репозиторием. Эти настройки применяются в командах fetch, push, pull.

git clone repo newRepo
создаёт полный клон репозитория repo в репозиторий newRepo (папка нового репозитория создаётся автоматически).

Втолкнуть изменения в удалённый репозиторий (git push)

Команда git push позволяет втолкнуть изменения текущего репозитория в удалённый. По умолчанию, вталкивать данные можно только в «голые» репозитории.

git push

вталкивает данные всего локального репозитория в соответствующие ветки удалённого репозитория

git push origin master
вталкивает данные текущей ветви в ветвь master удалённого репозитория origin. Если ветвь master не существует в удалённом репозитории, она будет создана. Если для удалённой ветви невозможно выполнить FAST-FORWARD слияние, то данные не будут «втолкнуты» (об этом будет сообщено).
Заметка: данный способ вызова команды является первым при первой фиксации в пустой удалённый репозиторий.

Откат изменений (git reset)

Команда git reset позволяет откатить изменения или неудачное слияние до последнего стабильного состояния (до последней фиксации).

git reset

отменит операцию слияния, но оставит изменения в конфликтующих файлах и/или в index области. При этом состоянии Git будет ожидать от вас фиксации или полной отмены изменений.

git reset —hard
отменит операцию слияния, очистит index область и вернёт все файлы work tree до состояния последней фиксации по текущей ветви.

Создание отметок готовности (git tag)

Команда git tag позволяет отметить текущее состояние, как некоторое конечное состояние для новой версии вашего проекта. Используется для создания списка стабильных версий проекта. Заметка: имя метки tag может использоваться в командах checkout и других командах, на ровне с именами фиксаций, именами ссылок (HEAD, FETCH_HEAD) и именами веток (master и т.п.).

git tag

показать список существующих tag-ов

git tag -m «описание» tagname

создать метку tag для текущего состояния (на текущей ветке) с именем tagname.

git tag -d tagname
удалить метку tag с именем tagname

Заключение

В этой части мы кратко рассмотрели список наиболее часто используемых команд при работе с Git. В следующей части мы рассмотрим практические примеры работы с Git.
Читать далее: Git в примерах
Смотрите также:

Автор: galiego710

Как напечатать UTF-8 текст из bat-файла?

Это просто! Надо всего лишь прочитать 100-500 мануалов по командной строке Windows и провести 200 экспериментов по написанию bat-скриптов)

Если серъёзно, то вывести файл с текстом в формате UTF-8 можно следующим образом

@echo off
set file=YourFileName
cmd /u /c chcp 65001 | echo my super text1 > "%file%"
cmd /u /c chcp 65001 | echo my super text2 >> "%file%"
cmd /u /c chcp 65001 | echo my super text3 >> "%file%"
...

Кавычки в записи «%file%» нужны по той причине, что имя файла может содержать пробелы. Читать

Как установить текущую дерикторию для Cygwin?

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

Ставится Cygwin довольно просто. В процессе установки в одном из режимов можно выставить флажки напротив программных пакетов, которые вы хотите установить. Я выбрал себе пакеты nano, git и что-то ещё.

После инсталляции на рабочем столе появляется ярлычок Cygwin для запуска среды.

 

Запуск Cygwin из любой папки

Так как я пользуюсь TotalCommander-ом, мне удобно запускать программы сразу из нужной мне директории. Создадим удобный bat-файл для запуска Cygwin.

Сразу, без долгих размышлений, копируем строку «Объект» из свойства этого ярлыка в новый созданный нами файл C:binbash.bat
Полное содержимое файла будет выглядеть так:

@start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico -

Обратите внимание на то, что путь до exe-файла у вас может быть другим. У себя я установил Cygwin в директорию C:cygwin.
Также если директория C:bin у вас ещё не добавлена в переменную окружения PATH, то это следует сделать.

 

Настройка запуска Cygwin

После некоторой работы с Cygwin я обнаружил, что не смотря на то, что запускать Cygwin я могу из любой директории, просто прописав слово bash, сама же запускаемая среда всегда открывается в домашней директории вашего пользователя. (Домашняя директория установлена в переменной окружения HOME).

Это выглядит не очень удобно, ведь если я пишу команду bash, находясь в директории D:xyz, то я и рассчитываю, что запущенный Cygwin также будет находиться в директории D:xyz.

Если вы обратите внимание, то увидите, что ярлык с рабочего стола запускает утилиту mintty.exe. Мы сразу понимаем, что необходимо ознакомиться с перечнем входящих атрибутов для данной команды.
Открываем Cygwin и вводим

man mintty

После внимательного изучения мануала, мы радуемся некоторым возможностям, о которых не подозревали, а именно: возможности задать размеры и координаты запускаемого окна Cygwin.

Открываем наш bat-файл и изменяем его содержимое на следующее:

@start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico --size 120,77 --position -4,0 -

В данном случае я установил нужный мне размер окна Cygwin и позицию появления окна (отрицательное значение -4 нужно, чтобы кромка окна оказалась за границей монитора, и её не было видно).

Теперь моё окно будет всегда появляться в удобных мне координатах, а не будет смещаться при каждом новом запуске на +8 пикселей по x,y.

Но как же быть с директорией запуска Cygwin?

Ведь переходить в нужную директорию из домашней — жутко не удобно!

Решение было найдено! Для установки текущей директории при запуске Cygwin мы можем использовать скрипт автозапуска для запускаемой среды bash.

Значит нам нужно усовершенствовать наш bash.bat файл таким образом, чтобы он создавал файл автозапуска для запускаемой консоли bash

Запускаем Cygwin, вводим команду «man bash» и читаем документацию в поисках необходимого нам. Находим несколько вариантов имён файлов для домашней директории пользователя, который запускаются при авторизации в bash.
Файлы, запускаемые при авторизации в bash:

~/.bash_profile
~/.bash_login
~/.profile

Файл, запускаемый при запуске «bash без авторизации в нём

~/.bashrc

Важное замечание: файл автозапуска ~/.bash_login (или любой другой) должен быть написан в кодировке UTF-8! И не должен использовать символы r. (Например команда pwd у меня не выполнялась, когда файл содержал в конце символ r, свойственный системе Windows).

Как оказалось, вывести UTF-8 текст из CMD не так-то просто, но возможно!
Вот пример, как это делается:

cmd /u /c chcp 65001 | echo некий текст >"имя_файла"

Усовершенствуем наш C:binbash.bat файл, теперь он имеет содержимое:

@echo off
SET file=.bash_login
cmd /u /c chcp 65001 | echo #!/bin/bash > "%HOME%%file%"
cmd /u /c chcp 65001 | echo cd "%CD:=/%" >> "%HOME%%file%"
@start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico --size 120,77 --position -4,0 -

После запуска, консоль bash выполняет содержимое файла ~/.bash_login. Этот файл должен быть в формате UTF-8. Для этого мы вызываем CMD cо флагом /u, который сообщает, что запускаемая консоль должна возвращать результат в формате UTF-8.

Далее в этой же строке после флага мы передаём команду. К
стати, флаг означает, что после выполнения переданной команды, консоль закрывается.

Как можно увидеть, мы передаём две команды, разделённых знаком |. Данный знако позволяет записать две нужных нам команды в одну строку.

Первая команда chcp 65001 устанавливает кодировку UTF-8 в запущенной консоли. (Чтобы узнать, какая текущая кодировка установлена в консоли, достаточно вызвать команду chcp без параметров.)

Вторая команда echo текст > «%HOME%%file%» печатает соответствующий текст в файл с именем «%HOME%%file%«, где имена переменных развёртываются в путь к домашней директории и имени файла .bash_login.

Обратите внимание на необычное обращение к переменной CD, в которой содержится текущий каталог cmd-консоли. Если обычно переменная развёртывается записью

%CD%

То в нашем случае, мы используем запись

%CD:=/%

Что позволяет сразу заменить все слеши в стиле Windows на слеши в стиле Linux / .

Не забываем помещать все имена файлов и директорий в двойные кавычки, таким образом это позволит попадать в директории содержащие пробелы.

За счёт того, что используется UTF-8, данная конструкция успешно позволяет открывать Cygwin в директориях с русскими именами.

Таким образом, при каждом запуске в консоли команды bash, будет запускаться скрипт C:binbash.bat, который перезаписывает файл автозагрузки среды bash в Cygwin. Теперь мы можем легко и удобно запускать консоль bash из любой директории и сразу попадать в эту же самую директорию в bash-консоли.

Радуемся и наслаждаемся результатом!

 

Подведём итоги

  1. Мы установили Cygwin
  2. Создали файл C:binbash.bat с содержимым
        @echo off
        SET file=.bash_login
        cmd /u /c chcp 65001 | echo #!/bin/bash > "%HOME%%file%"
        cmd /u /c chcp 65001 | echo cd "%CD:=/%" >> "%HOME%%file%"
        @start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico --size 120,77 --position -4,0 -

    (Заметка: путь C:bin должен содержаться в переменной окружения PATH)
    За счёт этого мы добились:

    • запуска терминала Cygwin в указанной позиции экрана (параметр —position)
    • запуска окна определённого размера (параметр —size)
    • запуска Cygwin из любой директории, набрав в консоли слово bash
    • при этом запущенный Cygwin располагается в той же директории, откуда был запущен!

Автор: galiego710

Git, в примерах

Содержание
1. Введение
2. Запуск консоли для работы с Git
3. Git, простые примеры
3.1. Настройка Git-репозитория
3.1.1. Пример 1: создание репозитория и установка локальных настроек
3.1.2. Пример 2: то же что и пример1, но короче запись
3.1.3. Пример 3: установка пользовательских настроек
3.2. Простые операции с одним репозиторием
3.2.1. Пример 1: создать репозиторий, зафиксировать изменения
3.2.2. Пример 2: создать репозиторий, сделать 3 фиксации
3.2.3. Пример 3: работа с git checkout (возврат)
3.2.4. Пример 4: работа с git checkout и git branch (возврат и создание новой ветки)
3.2.5. Пример 5: работа с git branch (слияние двух веток)
3.3. Операции с двумя репозиториями
3.3.1. Пример 1: создать реп, отклонироваться, внести изменения в первый, обновиться во втором
3.3.2. Пример 2: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.3. Пример 3: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.4. Пример 4: втолкнуть данные в удалённый пустой репозиторий
3.3.5. Пример 5: втолкнуть данные в удалённый не пустой репозиторий
3.4. Заключение

Введение

В этой части мы рассмотрим работу с репозиторием git на примерах

Команды, которые будут использоваться здесь, кратко описаны в предыдущей части Git, краткий справочник команд.

Читать

Git, краткая теория

Введение

Git (произн. «гит») — это распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года.

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

Помимо Git есть много других систем управления версиями (VCS, Version Control System), одной из которых является свободная (и бесплатная) система Subversion (кратко SVN).

Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.

Обо всём этом можно подробно прочитать в других источниках. Здесь же я опишу своё краткое представление о Git, которое у меня сложилось при работе с ним. Описание не претендует на полное и всеобъемлющее.

Описание будет в виде коротких тезисов и абзацев

Хотя местами указаны названия команд, они не будут выполняться, т.к. некоторые параметры для них опущены. Конкретные примеры применения команд git будут рассмотрены в следующей статье.

Git, описание

Общее

Git — это распределённая система управления версиями.

С git можно работать и локально и удалённо.

Репозиторий (хранилище) — это место, где хранится наши данные: история изменений нашего проекта

Репозиторий Git — это всегда локальный репозиторий

Данные репозитория git помещается в папку .git/ в папке, в которой вы создали репозиторий

Любую папку на компьютере можно легко превратить в папку с локальным репозиторием, выполнив всего одну команду git init внутри выбранной папки для репозитория

О репозитории

В Git, в отличии от Subversion, есть два типа репозитория: «простой» и «голый»

Простой репозиторий — это основной репозиторий, с которым вам предстоит работать. В нём вы можете выполнять большинство команд git. Такой репозиторий содержит подпапку .git/

Голый репозиторий — этот репозиторий часто, применяемый для ведения разработки в централизованном стиле. Данные репозитория не помещаются в подпапку .git/, а размещаются непосредственно в корне папки репозитория

Настройки репозитория

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

Каждый репозиторий Git имеет свои собственные настройки, располагаемые в файле .git/config

Вообще настройки репозиториев Git соответствуют общей архитектуре настроек в Linux. А именно, это означает, что настройки разделены на три уровня:

  • Уровень 1. Локальные настройки репозитория, применяются только к одному конкретному репозиторию, располагаются в каждом отдельном репозитории в файле .git/config
  • Уровень 2. Пользовательские настройки репозитория, применяются ко всем репозиториям пользователя, и располагаются в домашней директории пользователя в файле ~/.gitconfig (Для Windows путь к домашней директории вы можете явно указать в переменной окружения HOME)
  • Уровень 3. Системные настройки, применяются ко всем репозиториям всех пользователей системы, располагаются обычно в файле /etc/gitconfig (для Windows это может быть файл «c:Program Files (x86)Gitetcgitconfig»)

Приоритетным уровнем является первый, поэтому в нём могут быть переопределены все настройки, которые были установлены с верхних уровней.

Отношения между репозиториями

Репозиторий Git — это всегда локальный репозиторий, располагающийся в своей папке

Для репозитория есть понятие «наблюдать за другим репозиторием» (это понятие я придумал сам), на практике выражается использованием команд git remote в консоли и секций [remote «имя_наблюдения»] в файле конфигураций репозитория

Один репозиторий может:

  • не наблюдать ни за кем
  • или наблюдать за любым кол-вом репозиториев

Репозиторий A может загрузить полное (или частичное) содержимое репозитория B, даже если A «не наблюдает» за B, и даже если A не имеет общей истории с B.

«Загрузить» (git fetch) внешний репозиторий и «слиться» (git merge) с репозиторием — разные вещи! Мы всегда можем загрузить содержимое внешнего репозитория, посмотреть его историю изменений, но не прибегать к слиянию с ним.

Допустим, в репозитории A вы создали наблюдение с именем seeB за репозиторием B (git remote add seeB path/to/B). Но важно помнить, что «наблюдение» не обновляется автоматически. Это значит, что спустя время, git не сообщит вам об изменениях в репозитории B. Узнавать об этом вам необходимо самим — просто загрузив свежую версию репозитория B командой git fetch seeB. «Наблюдение» — это не какая-то система слежения, а просто копия репозитория B в одной из падпапок .git/ репозитория A.

Одиночная работа

Создав репозиторий, в него можно фиксировать изменения (git commit), просматривать логи изменений (git log), загружать указанную или последнюю версию фиксации (git checkout)

Одиночная работа с репозиторием сводится к тому, что вы делаете некоторые изменения в файлах и фиксируете их (подробнее об этом написано в статье «Название статьи»)

Распределённая работа

Командная работа над проектом (репозиторием) начинается тогда, когда кто-то клонирует его.

Клонировать репозиторий — значит скопировать весь репозиторий полностью: вместе со всей его историей изменений.

Один репозиторий может быть клонирован любым кол-вом людей.

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

Когда разработчик 2 внёс изменения в склонированный ранее репозиторий, он сообщает об этом разработчику 1. И тот «забирает» его изменения от себя используя команду git pull (или две последовательные команды git fetch и git merge). После этого разработчик 1 сообщает разработчику 2, что он принял изменения, после этого 2-й разработчик обновляет свой склонированный репозиторий командой git pull, и продолжает разработку.

Разработчик 2 не смог бы «втолкнуть» (git push) свои изменения в репозиторий разработчика 1, т.к. по умолчанию это запрещено (для больших подробностей смотрите опцию receive.denyCurrentBranch настроек репозитория)

Втолкнуть изменения из репозитория B в репозиторий A, без его ведома A можно в том случае, если репозиторий A является «голым» (т.е. создан командой git init —bare).

Распределённая структура разработки

Есть группа разработчиков. Каждый имеет свой собственный «простой» (git init) репозиторий. У каждого настроены «наблюдения» за репозиториями соседей. Каждый разработчик сам загружает к себе чужие изменений. Никто из разработчиков не может ни кому «втолкнуть» свои изменения.

Централизованная структура разработки

Существует центральный «голый» (git init —bare) репозиторий. Все остальные разработчики отклонировались от центрального репозитория. Каждый разработчик сначала вносит изменения в свой локальный репозиторий-клон, а потом «вталкивает» (git push) свои изменения в центральный сервер.

Ветви в репозитории

Используйте команду git branch, чтобы просмотреть список существующих веток в репозитории и узнать какая ветка сейчас выбрана активной

Используйте
команду git branch -r, чтобы просмотреть список веток в существующих «наблюдениях» репозитория

Ветка в репозитории — это альтернативный путь развития проекта

Репозиторий может содержать любое кол-во веток

При создании веток не происходит физического копирования файлов хранилища. Поэтому даже создав много веток, это не отразится сильно на размере репозитория

Две ветви одного репозитория могут быть слиты в одну ветку (git merge)

Создать новую ветку можно двумя способами:

  • создать явно командой git branch имя_ветки
  • или неявно: откотиться назад до любой фиксации, внести изменения и зафиксировать эти новые изменения.

Git защитит вас, если вы попытаетесь удалить ветку (git branch -d имя_ветви), изменения которой вы ещё не сливали в главной ветвь. Но если вы всё же хотите удалить ветвь без слияния с основной ветвью, используйте команду git branch -D имя_ветви

Общие понятия в репозитории

Репозиторий имеет несколько важных понятий, о которых важно знать, чтобы поняь принцип работы с репозиторием.

Working tree — рабочая папка «простого» репозитория, место, где хранятся файлы вашего проекта (папка .git не относится к этой области)

Index (staging area) — незримая область, в которой хранятся отметки о файлах, изменения в которых вы собираетесь зафиксировать

Local repo — ваш локальный репозиторий.

Remote repo — это удалённый репозиторий, который может находиться как в другой папке на вашем компьютере, так и на другой машине в сети.

Таким образом процесс работы с репозиторием сводится к следующей простой схеме:

  1. вы вносите изменения в working directory
  2. добавляете желаемые изменения в область staging area
  3. фиксируете изменения в репозиторий local repo

Также есть ещё несколько понятий, значение которых я ещё не уловил до конца:

  • HEAD — ссылка на текущее состояние репозитория
  • FETCH_HEAD — ссылка на состояние репозитория, загруженное в эту ссылку командой git fetch или git pull

Заключение

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

Читать далее: Git, краткий справочник команд

Смотрите также:

Автор: galiego710

Git, установка

Git (произн. «гит») — распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года.
В этой статье я кратко опишу как устанавливать git.

Если вы работаете в Windows, то взять git для установки можно по этой ссылке: Git-1.7.8-previewXXXXXXXX.exe.
Желающие также могут установить графический клиент TortoiseGit для работы с git, но все наши примеры будут для командной строки.

Установка Git в Windows

Запускаем Git-1.7.8-previewXXXXXXXX.exe, оставляем всё по умолчанию, дожидаемся завершения работы установщика. После инсталляции, вы можете запустить консоль для работы с git:

"ПускПрограммыGitGit bash"

Быстрый запуск консоли для git

Конечно, запускать консоль мышью через меню каждый раз — дело утомительное. Поэтому предлагаю немного оптимизировать этот процесс.
1. На основном диске создайте папку

C:bin

2. Создайте файл C:bingitbash.bat со следующим содержимым:

@%WINDIR%system32cmd.exe /c ""C:Program Files (x86)Gitbinsh.exe" --login -i"

Обратите внимание, что путь «»C:Program Files (x86)Gitbinsh.exe» у вас может быть другим. Всю эту строчку я взял из поля «Объект» свойства ярлыка «ПускПрограммыGitGit bash».

3. Добавьте путь C:bin в переменную PATH среды Windows.

Свойства «Мой компьютер» вкладка «Дополнительно» кнопка «Переменные среды…» блок «Системные переменные».
Найдите в списке переменную «Path», выберите её, нажмите «Изменить». Допишите в конец значения переменной следующую строку:

;C:bin

Нажмите Ок Ок Ок

Готово! Теперь, если у вас уже была открыта командная строка, её нужно закрыть и запустить снова. Теперь из любой папки мы можем написать gitbash для запуска командной строки для работы с git.

Читать далее: Git, краткая теория

Список сайтов:
Установка и настройка git и gitosis в Ubuntu
DVCS Git и TortoiseGit в картинках. Пособие для начинающих чайников.

Смотрите также:

Автор: galiego710