Библиография
[1] http://git-scm.com/book/ru/
[3] GIT compare to SVN commands
[4] Волшебство-Git
[5] git-cheat-sheet-most-useful-commands
[6] git help checkout -- cmdline to open browser with the help
Install under Linux
apt-get install git
Работа с бранчами
Работа с репозиторием
В случае проблем
Работа с командой git log
Расшаривание репозитория по сети
Бар - понятие, служащее для обозначения репозитория в который возможен удаленный коммит.
Чистый репозиторий - репозиторий без рабочих каталогов
Работа с тагами
Настройка Git
Работа с файлами и коммитами
Трюки в Git
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master`; do git branch --track ${branch##*/} $branch; done
Посмотреть, что войдёт в следующий коммит
git diff --cached
Посмотреть, что войдёт в следующий коммит
git commit --amend --author="xxx xxx <xxx@xxx.xxx>"
Изменить автора последнего коммита
Что такое git ?
Система контроля версий. Вы выкачиваете все "файлы" и историю локально на машину, и работаете у себя в локальных бранчах.
В гите есть концепция "бранчей". Гит не хранит бранчи в отдельных папочках как это "неформально" принято для svn, а хранит весь "репозиторий" для каждого бранча.
Особенность гита он версионирует именно изменения, а не файлы как svn.
Checkout может использоваться для:
-- отката изменений
-- переключения в другой бранч
-- переключение но другое состояния в графе состояний репозитория
p.s. В терминах svn - checkout означает выкачивание.
В терминах perforce - checkout означает маркировака изменний
В теримналогии git - переключение бранча
Что такое HEAD?
Концепция HEAD в git -- указатель на последний коммит текущего бранча в локальном репозитории.
Концепция сильно отличается от HEAD в svn.
Что такое REBASE?
Перемещение(rebase) работает следующим образом: находится общий предок для двух веток (на которой вы находитесь сейчас и на которую вы выполняете перемещение.
Для каждого из коммитов в текущей ветке берётся его дельта и сохраняется во временный файл; текущая ветка устанавливается на тот же коммит, что и ветка, на которую выполняется перемещение; и, наконец, одно за другим применяются все изменения. Нет никакой разницы в конечном результате объединения или перемещение, но перемещение выполняется для того, чтобы история была более аккуратной. Использовать rebase по идее лучше для кратковременных, локальных веток, а вот слияние использовать для веток в публичных репозиториях.
Что такое FAST FORWARD?
Когда вы пытаетесь слить один коммит с другим который можно на самом деле достигнуть, проследовав по истории чейнджов первого коммита, то Git поступает проще - перемещая указатель вперёд, так как нет расходящихся изменений, которые нужно было бы сливать воедино. Это называется "перемотка" (fast forward).
Что такое MERGE?
Трёхходовое слияние, используя два снимка состояния репозитория, на которые указывают вершины веток, и общий для этих двух веток снимок-прародитель. Git сам определяет наилучшего общего предка для слияния веток. Вместо того чтобы сделать fast forward, git создаёт новый снимок состояния, который является результатом трёхходового слияния, и автоматически создаёт новый коммит, который указывает на этот новый снимок состояния. Такой коммит называют коммит-слияние, так как он является особенным из-за того, что имеет больше одного предка.
Трекинг локальных бранчей
Если для текущей ветки настроено отображение на удалённую вектку посредством
-u / --set-upstream-to / --track, то на неё ссылать можно как на @{u}
git branch -u origin/remote_branch
git log -n1 @{upstream}
git log -n1 @{u}
VS 2010/2012: Tools->Extensions abd Update->Online Gallery->Git Source Control Provider
VS 2010/2012: Tools->Extensions abd Update->Online Gallery->Git Extensions
Релизы git-lfs
удобная вещь для хранения blob-ов
https://www.youtube.com/watch?v=9gaTargV5BY
https://github.com/git-lfs/git-lfs/wiki/Installation
https://github.com/git-lfs/git-lfs/wiki/Tutorial
https://www.atlassian.com/git/tutorials/git-lfs#committing-and-pushing
https://github.com/git-lfs/git-lfs/releases/tag/v2.0.2
# Append to track files or directory
git lfs track '*.png'
git lfs track 'images'
# Look what is tracking
git lfs track
git lfs ls-files
# To push/pull
cherry-pick
Что-то похожее на команду patch
http://think-like-a-git.net/sections/rebase-from-the-ground-up/cherry-picking-explained.html
Выдирание изменение 039d835 (без его предков и т.д., просто конкретно это изменение) и накат изменение на текущее состояние графа коммитов, с формированием автоматического коммита.
git cherry-pick 039d835
Тоже самое, но без формирования автоматического коммита.
git cherry-pick --no-commit 039d835