Linux git clone https

Содержание
  1. Git для начинающих. Урок 2. Создание и клонирование репозитория
  2. Видеоурок. Часть 1. Практика
  3. Видеоурок. Часть 2
  4. Конспект урока
  5. Что такое репозиторий
  6. Можно ли работать с git локально
  7. Локальный репозиторий
  8. Удаленный репозиторий, зачем он нужен
  9. Что такое клонирование
  10. Как клонировать готовый проект
  11. Как клонировать проект в другую папку
  12. Свой удаленный репозиторий
  13. Где держать репозиторий
  14. Как создать репозиторий в github
  15. Права на репозиторий, публичные и приватные
  16. Что такое ssh-ключи
  17. Как сгенерировать ssh-ключ
  18. Как добавить ssh-ключ в настройках github
  19. Два способа создания проекта
  20. Пустой проект
  21. Непустой проект
  22. Что могу посоветовать
  23. Как скопировать ssh-ключи с одной машины на другую
  24. Ссылки, которые могут пригодиться
  25. Git Guides
  26. Get started with git and GitHub
  27. 2. Основы работы с Git¶
  28. Введение¶
  29. Основы работы с удаленным репозиторием¶
  30. git clone — создание копии (удаленного) репозитория¶
  31. git fetch и git pull — забираем изменения из центрального репозитория¶
  32. git push — вносим изменения в удаленный репозиторий¶
  33. Работа с локальным репозиторием¶
  34. Базовые команды¶
  35. git init — создание репозитория
  36. git add и git rm — индексация изменений
  37. git status — состояние проекта, измененные и не добавленные файлы, индексированные файлы
  38. git commit — совершение коммита
  39. git reset — возврат к определенному коммиту, откат изменений, «жесткий» или «мягкий»
  40. git revert — отмена изменений, произведенных в прошлом отдельным коммитом
  41. git log — разнообразная информация о коммитах в целом
  42. git diff — отличия между деревьями проекта, коммитами и т.д.
  43. git show — показать изменения, внесенные отдельным коммитом
  44. git blame и git annotate — команды, помогающие отслеживать изменения файлов
  45. git grep — поиск слов по проекту, состоянию проекта в прошлом
  46. Ветвление¶
  47. git branch — создание, перечисление и удаление веток
  48. git checkout — переключение между ветками, извлечение файлов
  49. git merge — слияние веток (разрешение возможных конфликтов)
  50. git rebase — построение ровной линии коммитов
  51. git cherry-pick — применение к дереву проекта изменений, внесенных отдельным коммитом
  52. Прочие команды и необходимые возможности¶
  53. Хэш — уникальная идентификация объектов
  54. git tag — тэги как способ пометить уникальный коммит
  55. Относительная адресация
  56. файл .gitignore — объясняем git, какие файлы следует игнорировать
  57. Серверные команды репозитория¶
  58. Рецепты¶

Git для начинающих. Урок 2.
Создание и клонирование репозитория

Видеоурок. Часть 1. Практика

Все о репозиториях

  • что это такое
  • клонирование
  • публичные и приватные репозитории
  • создаем собственный репозиторий
  • Инициализация репозитория
  • Генерируем ssh-ключи
  • что это такое и зачем они нужны
  • генерируем свой ключ

Видеоурок. Часть 2

  • Что выбрать: github или bitbucket?
  • Копирование ssh-ключей

Конспект урока

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

Что такое репозиторий

Это каталог в файловой системе, где хранится информация о проекте:

  • файлы и папки проекта
  • история проекта
  • настройки проекта
  • служебная информация

Информация о репозитории хранится в скрытой папке .git в корне проекта.

Можно ли работать с git локально

Да, можно. Но при этом проект находится только на нашей машине и в случае поломки железа или случайной потери данных мы не сможем восстановить проект.

Локальный репозиторий

Это репозиторий, который хранится на нашей машине, в рабочей папке проекта. Это та самая скрытая папка .git

Удаленный репозиторий, зачем он нужен

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

Плюсы удаленного репозитория

  • выполняет роль резервной копии
  • возможность работать в команде
  • некоторые дополнительные возможности, которые предоставляет хостинг. Например, визуализация истории или возможность работать над проектом прямо в веб-интерфейсе

Что такое клонирование

Это копирование удаленного репозитория на локальную машину. Обычно это первое действие при работе с проектом. При клонировании на нашу машину копируются файлы и папки проекта и вся его история. То есть мы получаем доступ к истории не с момента начала нашей работы над проектом, а с самого начала проекта.

Как клонировать готовый проект

В первую очередь, нужно получить ссылку на проект. Мы можем найти ее сами или получим готовую, например, на новой работе. Возьмем для примера репозиторий vuejs — https://github.com/vuejs/vue.git

Наберем в командной строке

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

Как клонировать проект в другую папку

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

Где vue-new — нужное название папки.

Свой удаленный репозиторий

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

Где держать репозиторий

Есть множество вариантов, самые известные — это github и bitbucket. Нужно выбирать.

На самом деле не парьтесь. У них схожий функционал, и в начале работы с git мы не заметим разницы. bitbucket мне нравится больше из-за интерфейса, но в уроках выберем github из-за его большей популярности.

Чтобы продолжить уроки, нужно зарегистрироваться на github. Если у вас нет там аккаунта, то форму регистрации увидите сразу на главной странице — https://github.com/

Как создать репозиторий в github

После регистрации создание репозитория доступно с главной страницы github. При создании нужно указать название проекта и тип (публичный или приватный). На остальное пока не обращаем внимания.

Права на репозиторий, публичные и приватные

Есть 2 типа репозиториев:

  • публичный (public), открыт всем
  • приватный (private), доступен только определенному кругу лиц — в первую очередь, нам самим

Публичные репозитории хороши для opensource-проектов и чтобы показать в резюме. Пока нам это не нужно.

Для себя будем создавать приватные репозитории. Для этого нам понадобятся ssh-ключи.

Что такое ssh-ключи

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

ssh-ключ не имеет прямого отношения к git, но так репозитории находятся на удаленных серверах, то ssh-ключи используются для разграничения доступа к приватным репозиториям.

ssh-ключ состоит из пары ключей: публичного и приватного ключа. Это просто 2 текстовых файла:

  • /домашний-каталог/.ssh/id_rsa.pub — публичный
  • /домашний-каталог/.ssh/id_rsa — приватный

Публичный ключ передается сторонним серверам, например, github, для открытия доступа на эти сервера. Приватный ключ хранится только на нашей машине и никому не передается. То есть когда у нас просят ssh-ключ, чтобы дать доступ на какой-нибудь сервер, мы отдаем именно публичный ключ, id_rsa.pub

Как сгенерировать ssh-ключ

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

Если видим файлы id_rsa и id_rsa.pub — отлично, ключи уже есть.

Если этих файлов нет, то нужно сгенерировать ключи утилитой ssh-keygen. В Windows она устанавливается вместе с git, в Linux и MacOS при необходимости установите. В Linux, например, вот так

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

Появились файлы id_rsa и id_rsa.pub — значит, ключи успешно сгенерированы.

known_hosts — это файл, в котором ssh прописывает сервера, на которые мы заходим. При первом подключении к github нужно будет разрешить доступ к github.com (напечатать yes в терминале)

Как добавить ssh-ключ в настройках github

Открываем публичный ключ id_rsa.pub и копируем его содержимое. В настройках github ищем раздел «SSH и GPG keys» — https://github.com/settings/keys. Жмем «New SSH key», задаем название ключа, например, имя, и вставляем форму публичный ключ, прямо текстом. Все, теперь у нас есть доступ к нашим приватным репозиториям.

Два способа создания проекта

Первый, когда мы начинаем новый проект. Удобнее будет создать репозиторий на github и склонировать пустой проект на локальную машину.

Второй, когда у нас уже есть проект. Нужно зайти в папку проекта и связать его с уже существующим репозиторием на github. Это называется инициализация.

Рассмотрим оба способа.

Пустой проект

Создаем приватный репозиторий на github, назовем его first-site. Я зарегистрировался под именем Webdevkin, моя ссылка для клонирования будет такая — git@github.com:Webdevkin/first-site.git. Ваша зависит от имени пользователя.

Идем в командную строку и запускаем

В текущей папке получим новую папку с названием first-site — это и есть наш проект.

P.S. У вас склонировать этот репозиторий не получится — он закрытый. Создайте свой 🙂

Непустой проект

Допустим, у нас на локальной машине уже есть проект second-site. Создаем в github репозиторий second-site. Заходим в папку проекта и выполняем команды

Читайте также:  Альтернатива unetbootin для linux

Все, можно приступать к работе над проектом. Команды add, commit и push мы разберем в следующих уроках.

Это единственный урок, в котором мы разбирались с тонкостями репозиториев. В дальнейшем будем считать, что репозиторий = проект.

Что могу посоветовать

  • github или bitbucket? Для личных проектов неважно, оба сервиса разрешают бесплатно создавать приватные репозитории. Для open source или резюме — github
  • не увлекайтесь клонированием в папку со своим названием. Есть шанс запутаться, самому или коллегам
  • не путайте публичный и приватный ключи. Отдаем вовне только публичный ключ id_rsa.pub
  • при смене рабочей машины можно не генерировать ssh-ключи заново, а скопировать их со старой машины. Тогда не придется заново прописывать новые ключи на серверах

Немного подробнее о копировании ssh-ключей

Как скопировать ssh-ключи с одной машины на другую

Хочу немного затронуть эту тему отдельно. Генерировать ключ на новой машине не обязательно. Но нужно выполнить такие действия

  • Скопировать id_rsa и id_rsa.pub со старой машины на новую
  • Посмотреть права на файлы, возможно, ключи окажутся слишком «открытыми» для записи и потребуется сменить им права доступа — sudo chmod 700

/.ssh/*

  • Выполнить команду ssh-add
  • Ссылки, которые могут пригодиться

    • github — https://github.com/
    • bitbucket — https://bitbucket.org/
    • подробнее об ssh-ключах (en) — connecting-to-github-with-ssh

    На этом все. В следующем уроке мы сделаем первые изменения в проекте и начнем понимать, в чем заключается прелесть git.

    Источник

    Git Guides

    The git clone command is used to create a copy of a specific repository or branch within a repository.

    Git is a distributed version control system. Maximize the advantages of a full repository on your own machine by cloning.

    What Does git clone Do?

    When you clone a repository, you don’t get one file, like you may in other centralized version control systems. By cloning with Git, you get the entire repository — all files, all branches, and all commits.

    Cloning a repository is typically only done once, at the beginning of your interaction with a project. Once a repository already exists on a remote, like on GitHub, then you would clone that repository so you could interact with it locally. Once you have cloned a repository, you won’t need to clone it again to do regular development.

    The ability to work with the entire repository means that all developers can work more freely. Without being limited by which files you can work on, you can work on a feature branch to make changes safely. Then, you can:

    • later use git push to share your branch with the remote repository
    • open a pull request to compare the changes with your collaborators
    • test and deploy as needed from the branch
    • merge into the master branch.

    How to Use git clone

    Common usages and options for git clone

    • git clone [url] : Clone (download) a repository that already exists on GitHub, including all of the files, branches, and commits.
    • git clone —mirror : Clone a repository but without the ability to edit any of the files. This includes the refs, or branches. You may want to use this if you are trying to create a secondary copy of a repository on a separate remote and you want to match all of the branches. This may occur during configuration using a new remote for your Git hosting, or when using Git during automated testing.
    • git clone —single-branch : Clone only a single branch
    • git clone —sparse : Instead of populating the working directory with all of the files in the current commit recursively, only populate the files present in the root directory. This could help with performance when cloning large repositories with many directories and sub-directories.
    • `git clone —recurse-submodules[=

    You can see all of the many options with git clone in git-scm’s documentation.

    Examples of git clone

    The most common usage of cloning is to simply clone a repository. This is only done once, when you begin working on a project, and would follow the syntax of git clone [url] .

    git clone A Branch

    git clone —single-branch : By default, git clone will create remote tracking branches for all of the branches currently present in the remote which is being cloned. The only local branch that is created is the default branch.

    But, maybe for some reason you would like to only get a remote tracking branch for one specific branch, or clone one branch which isn’t the default branch. Both of these things happen when you use —single-branch with git clone .

    This will create a clone that only has commits included in the current line of history. This means no other branches will be cloned. You can specify a certain branch to clone, but the default branch, usually master , will be selected by default.

    To clone one specific branch, use:

    git clone [url] —branch [branch] —single-branch

    Cloning only one branch does not add any benefits unless the repository is very large and contains binary files that slow down the performance of the repository. The recommended solution is to optimize the performance of the repository before relying on single branch cloning strategies.

    git clone With SSH

    Depending on how you authenticate with the remote server, you may choose to clone using SSH.

    If you choose to clone with SSH, you would use a specific SSH path for the repository instead of a URL. Typically, developers are authenticated with SSH from the machine level. This means that you would probably clone with HTTPS or with SSH — not a mix of both for your repositories.

    • git branch : This shows the existing branches in your local repository. You can also use git branch [banch-name] to create a branch from your current location, or git branch —all to see all branches, both the local ones on your machine, and the remote tracking branches stored from the last git pull or git fetch from the remote.
    • git pull : Updates your current local working branch with all new commits from the corresponding remote branch on GitHub. git pull is a combination of git fetch and git merge .
    • git push : Uploads all local branch commits to the remote.
    • git remote -v : Show the associated remote repositories and their stored name, like origin .

    Get started with git and GitHub

    Review code, manage projects, and build software alongside 40 million developers.

    Источник

    2. Основы работы с Git¶

    Введение¶

    Git (произн. «гит») — распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux. На сегодняшний день поддерживается Джунио Хамано.

    Система спроектирована как набор программ, специально разработанных с учётом их использования в скриптах. Это позволяет удобно создавать специализированные системы контроля версий на базе Git или пользовательские интерфейсы. Например, Cogito является именно таким примером фронтенда к репозиториям Git, а StGit использует Git для управления коллекцией патчей.

    Git поддерживает быстрое разделение и слияние версий, включает инструменты для визуализации и навигации по нелинейной истории разработки. Как и Darcs, BitKeeper, Mercurial, SVK, Bazaar и Monotone, Git предоставляет каждому разработчику локальную копию всей истории разработки; изменения копируются из одного репозитория в другой.

    Удалённый доступ к репозиториям Git обеспечивается git-daemon, gitosis, SSH- или HTTP-сервером. TCP-сервис git-daemon входит в дистрибутив Git и является наряду с SSH наиболее распространённым и надёжным методом доступа. Метод доступа по HTTP, несмотря на ряд ограничений, очень популярен в контролируемых сетях, потому что позволяет использовать существующие конфигурации сетевых фильтров.

    Основы работы с удаленным репозиторием¶

    git clone — создание копии (удаленного) репозитория¶

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

    Клонируем репозиторий, используя протокол http:

    Клонируем репозиторий с той же машины в директорию myrepo :

    Клонируем репозиторий, используя безопасный протокол ssh:

    У git имеется и собственный протокол:

    Импортируем svn репозиторий, используя протокол http:

    -s – понимать стандартные папки SVN (trunk, branches, tags)

    git fetch и git pull — забираем изменения из центрального репозитория¶

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

    git fetch — забрать изменения удаленной ветки из репозитория по умолчания, основной ветки; той, которая была использована при клонировании репозитория. Изменения обновят удаленную ветку (remote tracking branch), после чего надо будет провести слияние с локальной ветку командой git merge.

    git fetch /home/username/project — забрать изменения из определенного репозитория.

    Возможно также использовать синонимы для адресов, создаваемые командой git remote :

    git fetch username-project — забрать изменения по адресу, определяемому синонимом.

    Естественно, что после оценки изменений, например, командой git diff , надо создать коммит слияния с основной:

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

    Забрать из репозитория, для которого были созданы удаленные ветки по умолчанию:

    Забрать изменения и метки из определенного репозитория:

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

    git push — вносим изменения в удаленный репозиторий¶

    После проведения работы в экспериментальной ветке, слияния с основной, необходимо обновить удаленный репозиторий (удаленную ветку). Для этого используется команда git push.

    Отправить свои изменения в удаленную ветку, созданную при клонировании по умолчанию:

    Отправить изменения из ветки master в ветку experimental удаленного репозитория:

    В удаленном репозитории origin удалить ветку experimental:

    В удаленную ветку master репозитория origin (синоним репозитория по умолчанию) ветки локальной ветки master:

    Отправить метки в удаленную ветку master репозитория origin:

    Изменить указатель для удаленной ветки master репозитория origin (master будет такой же как и develop)

    Добавить ветку test в удаленный репозиторий origin, указывающую на коммит ветки develop:

    Работа с локальным репозиторием¶

    Базовые команды¶

    git init — создание репозитория

    Команда git init создает в директории пустой репозиторий в виде директории .git , где и будет в дальнейшем храниться вся информация об истории коммитов, тегах — о ходе разработки проекта:

    git add и git rm — индексация изменений

    Следующее, что нужно знать — команда git add . Она позволяет внести в индекс — временное хранилище — изменения, которые затем войдут в коммит. Примеры использования:

    индексация измененного файла, либо оповещение о создании нового:

    внести в индекс все изменения, включая новые файлы:

    Из индекса и дерева проекта одновременно файл можно удалить командой git rm :

    хороший пример удаления из документации к git, удаляются сразу все файлы txt из папки:

    внести в индекс все удаленные файлы:

    Сбросить весь индекс или удалить из него изменения определенного файла можно
    командой git reset :

    сбросить весь индекс:

    удалить из индекса конкретный файл:

    Команда git reset используется не только для сбрасывания индекса, поэтому дальше
    ей будет уделено гораздо больше внимания.

    git status — состояние проекта, измененные и не добавленные файлы, индексированные файлы

    Команду git status , пожалуй, можно считать самой часто используемой наряду с
    командами коммита и индексации. Она выводит информацию обо всех изменениях,
    внесенных в дерево директорий проекта по сравнению с последним коммитом рабочей
    ветки; отдельно выводятся внесенные в индекс и неиндексированные
    файлы. Использовать ее крайне просто:

    Кроме того, git status указывает на файлы с неразрешенными конфликтами слияния и
    файлы, игнорируемые git.

    git commit — совершение коммита

    Коммит — базовое понятие во всех системах контроля версий, поэтому совершаться
    он должен легко и по возможности быстро. В простейшем случае достаточно
    после индексации набрать:

    Если индекс не пустой, то на его основе будет совершен коммит, после чего
    пользователя попросят прокомментировать вносимые изменения вызовом команды
    edit . Сохраняемся, и вуаля! Коммит готов.

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

    git reset — возврат к определенному коммиту, откат изменений, «жесткий» или «мягкий»

    Помимо работы с индексом (см. выше), git reset позволяет сбросить состояние проекта до какого-либо коммита в истории. В git данное действие может быть двух видов: «мягкого»(soft reset) и «жесткого» (hard reset).

    «Мягкий» (с ключом —soft ) резет оставит нетронутыми ваши индекс и все дерево файлов и директорий проекта, вернется к работе с указанным коммитом. Иными словами, если вы обнаруживаете ошибку в только что совершенном коммите или комментарии к нему, то легко можно исправить ситуацию:

    1. git commit — некорректный коммит
    2. git reset —soft HEAD^ — переходим к работе над уже совершенным коммитом, сохраняя все состояние проекта и проиндексированные файлы
    3. edit WRONGFILE
    4. edit ANOTHERWRONGFILE
    5. git add .
    6. git commit -c ORIG_HEAD — вернуться к последнему коммиту, будет предложено редактировать его сообщение. Если сообщение оставить прежним, то достаточно изменить регистр ключа -с:

    Обратите внимание на обозначение HEAD^, оно означает «обратиться к предку последнего коммита». Подробней описан синтаксис такой относительной адресации будет ниже, в разделе «Хэши, тэги, относительная адресация». Соответственно, HEAD — ссылка на последний коммит. Ссылка ORIG_HEAD после «мягкого» резета указывает на оригинальный коммит.

    Естественно, можно вернуться и на большую глубину коммитов,

    «Жесткий» резет (ключ —hard ) — команда, которую следует использовать с
    осторожностью. git reset —hard вернет дерево проекта и индекс в состояние,
    соответствующее указанному коммиту, удалив изменения последующих коммитов:

    Если команда достигнет точки ветвления, удаления коммита не произойдет.

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

    git revert — отмена изменений, произведенных в прошлом отдельным коммитом

    Возможна ситуация, в которой требуется отменить изменения, внесенные отдельным коммитом. git revert создает новый коммит, накладывающий обратные изменения.

    Отменяем коммит, помеченный тегом:

    Отменяем коммит, используя его хэш:

    Для использования команды необходимо, чтобы состояние проекта не отличалось от состояния, зафиксированного последним коммитом.

    git log — разнообразная информация о коммитах в целом

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

    Простейший пример использования, в котором приводится короткая справка по всем
    коммитам, коснувшимся активной в настоящий момент ветки (о ветках и ветвлении
    подробно узнать можно ниже, в разделе «Ветвления и слияния»):

    Получить подробную информацию о каждом в виде патчей по файлам из коммитов
    можно, добавив ключ -p (или -u):

    Статистика изменения файлов, вроде числа измененных файлов, внесенных в них
    строк, удаленных файлов вызывается ключом —stat :

    За информацию по созданиям, переименованиям и правам доступа файлов отвечает ключ
    —summary :

    Чтобы просмотреть историю отдельного файла, достаточно указать в виде параметра
    его имя (кстати, в моей старой версии git этот способ не срабатывает,
    обязательно добавлять » — » перед «README»):

    или, если версия git не совсем свежая:

    Далее будет приводится только более современный вариант синтаксиса. Возможно
    указывать время, начиная в определенного момента («weeks», «days», «hours», «s»
    и так далее):

    изменения, касающиеся отдельной папки:

    Можно отталкиваться от тегов.

    Все коммиты, начиная с тега v1:

    Все коммиты, включающие изменения файла README, начиная с тега v1:

    Все коммиты, включающие изменения файла README, начиная с тега v1 и заканчивая тегом v2:

    Интересные возможности по формату вывода команды предоставляет ключ —pretty .

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

    Лаконичная информация о коммитах, приводятся только автор и комментарий:

    Более полная информация о коммитах, с именем автора, комментарием, датой создания и внесения коммита:

    В принципе, формат вывода можно определить самостоятельно:

    Определение формата можно поискать в разделе по git log из Git Community Book
    или справке. Красивый ASCII-граф коммитов выводится с использованием ключа
    —graph .

    git diff — отличия между деревьями проекта, коммитами и т.д.

    Своего рода подмножеством команды git log можно считать команду git diff ,
    определяющую изменения между объектами в проекте — деревьями (файлов и
    директорий).

    Показать изменения, не внесенные в индекс:

    Изменения, внесенные в индекс:

    Изменения в проекте по сравнению с последним коммитом:

    Можно сравнивать «головы» веток:

    или активную ветку с какой-либо:

    git show — показать изменения, внесенные отдельным коммитом

    Посмотреть изменения, внесенные любым коммитом в истории, можно командой git show :

    git blame и git annotate — команды, помогающие отслеживать изменения файлов

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

    Можно указать и конкретные строки для отображения:

    Аналогично работает команда git annotate , выводящая и строки, и информацию о
    коммитах, их коснувшихся:

    git grep — поиск слов по проекту, состоянию проекта в прошлом

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

    Поиск слова tst в проекте:

    Подсчитать число упоминаний tst в проекте:

    Поиск в старой версии проекта:

    Команда позволяет использовать логическое И и ИЛИ.

    Найти строки, где упоминаются и первое слово, и второе:

    Найти строки, где встречается хотя бы одно из слов:

    Ветвление¶

    git branch — создание, перечисление и удаление веток

    Работа с ветками — очень легкая процедура в git, все необходимые механизмы сконцентрированы в одной команде:

    Просто перечислить существующие ветки, отметив активную:

    Создать новую ветку new-branch:

    Удалить ветку, если та была залита (merged) с разрешением возможных конфликтов в текущую:

    Удалить ветку в любом случае:

    Показать те ветки, среди предков которых есть определенный коммит:

    git checkout — переключение между ветками, извлечение файлов

    Команда git checkout позволяет переключаться между последними коммитами (если упрощенно) веток:

    Создаст ветку, в которую и произойдет переключение

    Если в текущей ветке были какие-то изменения по сравнению с последним коммитом в ветке(HEAD), то команда откажется производить переключение, дабы не потерять произведенную работу. Проигнорировать этот факт позволяет ключ -f :

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

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

    Вернуть somefile к состоянию последнего коммита:

    Вернуть somefile к состоянию на два коммита назад по ветке:

    git merge — слияние веток (разрешение возможных конфликтов)

    Слияние веток, в отличие от обычной практики централизованных систем, в git происходит практически каждый день. Естественно, что имеется удобный интерфейс к популярной операции.

    Попробовать объединить текующую ветку и ветку new-feature:

    В случае возникновения конфликтов коммита не происходит, а по проблемным файлам расставляются специальные метки а-ля svn; сами же файлы отмечаются в индексе как «не соединенные» (unmerged). До тех пор пока проблемы не будут решены, коммит совершить будет нельзя.

    Например, конфликт возник в файле TROUBLE , что можно увидеть в git status .

    Произошла неудачная попытка слияния:

    Смотрим на проблемные места:

    Индексируем наши изменения, тем самым снимая метки:

    Совершаем коммит слияния:

    Вот и все, ничего сложного. Если в процессе разрешения вы передумали разрешать конфликт, достаточно набрать (это вернёт обе ветки в исходные состояния):

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

    git rebase — построение ровной линии коммитов

    Предположим, разработчик завел дополнительную ветку для разработки отдельной возможности и совершил в ней несколько коммитов. Одновременно по какой-либо причине в основной ветке также были совершены коммиты: например, в нее были залиты изменения с удаленного сервера, либо сам разработчик совершал в ней коммиты.

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

    Предположим, имеется две ветки, master и topic, в каждой из которых было совершенно несколько коммитов начиная с момента ветвления. Команда git rebase берет коммиты из ветки topic и накладывает их на последний коммит ветки master.

    Вариант, в котором явно указывается, что и куда накладывается:

    на master накладывается активная в настоящий момент ветка:

    После использования команды история становится линейной. При возникновении конфликтов при поочередном накладывании коммитов работа команды будет останавливаться, а в проблемные местах файлов появятся соответствующие метки. После редактирования — разрешения конфликтов — файлы следует внести в индекс командой git add и продолжить наложение следующих коммитов командой git rebase —continue . Альтернативными выходами будут команды git rebase —skip (пропустить наложение коммита и перейти к следующему) или git rebase —abort (отмена работы команды и всех внесенных изменений).

    С ключом -i ( —interactive ) команда будет работать в интерактивном режиме. Пользователю будет предоставлена возможность определить порядок внесения изменений, автоматически будет вызывать редактор для разрешения конфликтов и так далее.

    git cherry-pick — применение к дереву проекта изменений, внесенных отдельным коммитом

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

    Изменения, внесенные указанным коммитом будут применены к дереву, автоматически проиндексированы и станут коммитом в активной ветке:

    Ключ -n показывает, что изменения надо просто применить к дереву проекта без индексации и создания коммита

    Прочие команды и необходимые возможности¶

    Хэш — уникальная идентификация объектов

    В git для идентификации любых объектов используется уникальный (то есть с огромной вероятностью уникальный) хэш из 40 символов, который определяется хэшируюшей функцией на основе содержимого объекта. Объекты — это все: коммиты, файлы, тэги, деревья. Поскольку хэш уникален для содержимого, например, файла, то и сравнивать такие файлы очень легко — достаточно просто сравнить две строки в сорок символов.

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

    найти разницу текущего состояния проекта и коммита за номером… сами видите, каким:

    То же самое, но оставляем только шесть первых символов. Git поймет, о каком коммите идет речь, если не существует другого коммита с таким началом хэша:

    Иногда хватает и четырех символов:

    Читаем лог с коммита по коммит:

    Разумеется, человеку пользоваться хэшами не так удобно, как машине, именно поэтому были введены другие объекты — тэги.

    git tag — тэги как способ пометить уникальный коммит

    Тэг (tag) — это объект, связанный с коммитом; хранящий ссылку на сам коммит, имя автора, собственное имя и некоторый комментарий. Кроме того, разработчик может оставлять на таких тегах собственную цифровую подпись.

    Кроме этого в git представленные так называемые «легковесные тэги» (lightweight tags), состоящие только из имени и ссылки на коммит. Такие тэги, как правило, используются для упрощения навигации по дереву истории; создать их очень легко.

    Создать «легковесный» тэг, связанный с последним коммитом; если тэг уже есть, то еще один создан не будет:

    Пометить определенный коммит:

    Создать тэг для последнего коммита, заменить существующий, если таковой уже был:

    После создания тэга его имя можно использовать вместо хэша в любых командах вроде git diff , git log и так далее:

    Обычные тэги имеет смысл использовать для приложения к коммиту какой-либо информации, вроде номера версии и комментария к нему. Иными словами, если в комментарии к коммиту пишешь «исправил такой-то баг», то в комментарии к тэгу по имени «v1.0» будет что-то вроде «стабильная версия, готовая к использованию».

    Создать обычный тэг для последнего коммита; будет вызван текстовый редактор для составления комментария:

    Создать обычный тэг, сразу указав в качестве аргумента комментарий:

    Команды перечисления, удаления, перезаписи для обычных тэгов не отличаются от команд для «легковесных» тэгов.

    Относительная адресация

    Вместо ревизий и тэгов в качестве имени коммита можно опираться на еще один механизм — относительную адресацию. Например, можно обратиться прямо к предку последнего коммита ветки master:

    Если после «птички» поставить цифру, то можно адресоваться по нескольким предкам коммитов слияния:

    найти изменения по сравнению со вторым предком последнего коммита в master; HEAD здесь — указатель на последний коммит активной ветки:

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

    что привнес «дедушка» нынешнего коммита:

    Обозначения можно объединять, чтобы добраться до нужного коммита:

    файл .gitignore — объясняем git, какие файлы следует игнорировать

    Иногда по директориям проекта встречаются файлы, которые не хочется постоянно видеть в сводке git status . Например, вспомогательные файлы текстовых редакторов, временные файлы и прочий мусор.

    Заставить git status игнорировать определенные файлы можно, создав в корне или глубже по дереву (если ограничения должны быть только в определенных директория) файл .gitignore . В этих файлах можно описывать шаблоны игнорируемых файлов определенного формата.

    Пример содержимого такого файла:

    Существуют и другие способы указания игнорируемых файлов, о которых можно узнать из справки git help gitignore .

    Серверные команды репозитория¶

    ; git update-server-info : Команда создает вспомогательные файлы для dumb-сервера в $GIT_DIR/info и $GIT_OBJECT_DIRECTORY/info каталогах, чтобы помочь клиентам узнать, какие ссылки и пакеты есть на сервере.

    ; git count-objects : Проверка, сколько объектов будет потеряно и объём освобождаемого места при перепаковке репозитория.
    ; git gc : Переупаковка локального репозитория.

    Рецепты¶

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

    Импорт svn репозитория на Git-сервер

    Источник

    Читайте также:  Ubuntu one download linux
    Оцените статью