Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик-аккаунт, просьба указывать источник перепечатываемой статьи.
Недавно я наконец-то выложил несколько очень старых проектов, за которые отвечал, изSVN
мигрировал вGit
, вся строка проекта доступна изSVN
освобожден отSVN
иGit
Переключайтесь между вариантами использования, чтобы вы могли, наконец, успокоиться и изучитьGit
использование.
Говоря оGit
, как программист, вы обязательно будете использовать его в разработке проекта или будете использовать в будущем, но я полагаю, что многие используютGit
, просто остановитесь на некоторых простых операциях, таких как отправка (commit
),Вытащить(pull
), толкать (push
).
И дляGit
как это работает и как это исправитьGit
конфликты версий и как их использоватьGit
У вас может не быть глубокого понимания таких вопросов, как управление исходным кодом, поэтому давайте начнем с самого простого и обсудим от мелкого к более глубокому.
Что такое Гит?
-
Git
В настоящее время самая популярная и мощная распределенная система управления версиями с открытым исходным кодом. -
Git
авторLinus Torvalds
, это имя звучит знакомо, да, даLinus Torvalds
СлишкомLinux
Автор операционной системы. -
Git
Автор автора хочет разработать распределенную систему управления версиями, потому что он ненавидит централизованные системы управления версиями.Git
рождение. -
Git
Первоначальная цель разработки также для удобстваLinux
Лучшее управление и обслуживание сообществаLinux
системный код.
Сравнение Git и SVN
Git
иSVN
Сравнение между ними также можно рассматривать как分布式版本管理系统
и集中式版本管理系统
Сравнение,Git
представляет собой распределенную систему управления версиями, иSVN
Централизованная система управления версиями.
Сравните с местоположением репозитория
за集中式版本管理系统
Другими словами, библиотека версий размещается на удаленном сервере, а разработчики отправляют версии кода, подключаясь к библиотеке версий на сервере.Если они не могут подключиться к серверу, нет возможности управлять версией кода вообще, в виде:
В распределенной системе управления версиями отправка кода и управление версиями могут выполняться локально, а различные операции по управлению версиями могут выполняться без подключения к серверу.
Только когда мы чувствуем, что нам нужно синхронизировать код с другими, нам нужно подключиться к другим репозиториям для синхронизации, как показано на следующем рисунке:
Рисунок 2: Схематическая диаграмма взаимодействия между разработчиками GitСравнение трудности обучения
Git
Несмотря на то, что он очень мощный и простой в использовании, его сложнее освоить, чемSVN
Большой, хотя легко начать, просто нужно научитьсяgit add
,git commit
,git push
иgit pull
, но для того, чтобы по-настоящему изучить и применить его к управлению разработкой сложных проектов, цикл обучения по-прежнему относительно долог, иSVN
относительно легко усваивается.
Сравните с размером репозитория
Git
Библиотека версий хранится в нашем локальном хранилище, поэтому она будет занимать наше локальное хранилище, кроме того, потому чтоGit
Репозитории содержат копии каждого файла и поэтому занимают больше места, чем централизованные системы управления версиями.
Различать Git, GitLab, GitHub
Git
представляет собой распределенную систему контроля версий, черезGit
С предоставленным набором инструментов мы можем управлять локальными репозиториями и можем фиксировать код в удаленных репозиториях или извлекать версии, отправленные другими.
Github
основан наGit
онлайнWeb
хостинг кодов, мы можемGithub
создать свой собственный общедоступный или частный репозиторий (私有库要钱的
), и может бытьWeb
страница для управления, и в нашем локальном также может бытьGit
взаимодействовать с ним, зафиксировать код вGithub
Совместно с остальной частью команды в удаленном репозитории выше.
Что, если нам потребуется больше безопасности для исходного кода нашего собственного проекта? В настоящее время нам нужно создать собственную службу размещения кода.GitLab
Это хороший выбор.
GitLab
это набор для создания собственного частногоWeb
Проекты службы хостинга кода, используяGitLab
, мы можем построить на нашем собственном сервере сGithub
то жеWeb
Сервер для размещения кода тожеGitLab
также предоставить то же самоеWeb
Операции по управлению страницей.
Минимальная конфигурация
если ты закончилGit
установка, затем использованиеGit
Перед вами необходимо выполнить небольшую настройку, то есть настроить информацию о пользователе.
Git
Все конфигурации используютgit config
команда для завершения, и информацию о пользователе нужно только настроитьuser.name
иuser.email
Вы можете следующим образом:
# 配置用户名
git config --global user.name '你的用户名'
# 配置邮箱
git config --global user.email '你的邮箱'
вышеgit config
параметры для команд--global
Указанная конфигурация является глобальной конфигурацией, то есть она будет действовать для всех репозиториев, кроме--global
за пределами,git config
Команды также могут быть--local
,-- system
Два параметра для указания уровня конфигурации.
параметр | инструкция |
---|---|
--global | глобально действительный |
--system | Действительно для всех зарегистрированных пользователей |
--local | Действительно для текущего репозитория |
Если у вас такая же конфигурация, перейдите--local
Указанная конфигурация имеет приоритет над--system
,и--system
приоритет больше, чем--global
.
Просмотр конфигурации
существуетgit config
следовать за--list
Параметры можно посмотретьGit
настроить, указать--global
,--system
,--local
, вы можете просматривать различные уровни конфигурации, такие как:
Посмотреть глобальную конфигурацию
git config --list --global
Просмотр конфигурации на уровне пользователя
git config --list --system
Просмотр текущей конфигурации репозитория
git config --list --local
если указано--local
, каталог, в котором в данный момент выполняется команда, должен находиться в репозитории, иначе будет сообщено о следующей ошибке:
fatal: --local can only be used inside a git repository
Управление репозиторием
РепозиторийGit
Самая важная концепция в репозитории содержит все коммиты текущего проекта.
Создайте репозиторий локальной версии
Что жGit
После этого можно пройтиGit
Предоставленная команда используется для создания репозитория, и через репозиторий файлы, добавленные в репозиторий, версионируются.
Сначала создайте каталог, затем создайте репозиторий
# 创建空目录
$ mkdir test
# 进入空目录
$ cd test
# 初始化版本库
$ git init
Мы также можем упростить описанные выше шаги:
$ git init test
$ cd test
Клонировать удаленный репозиторий
выше мы проходимgit init
команда для локальной инициализации репозитория, метод, называемый裸库
, а иногда просто пропускаемgit clone
Команда клонирует удаленный репозиторий в локальный, например:
git clone https://www.github.com/test/test.git
Таким образом, мы можем клонировать проекты в удаленном репозитории в локальный.Когда мы участвуем в некоторых старых проектах, мы обычно используем этот метод для создания локального репозитория.
Рабочий каталог, репозиторий (стадия), промежуточная область (репозиторий)
С помощью двух вышеуказанных методов мы создали репозиторий локально, а затем можем начать добавлять в репозиторий наши собственные файлы.
Сначала мы создаем файл с именем в рабочем каталогеtest.txt
Содержимое файла может быть произвольным, например:
这是我添加到版本库中的第一个文件
В это время мы проходимgit status
команда для просмотра состояния рабочего каталога следующим образом:
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
можно увидеть,Git
предложить нам выполнитьgit add <file>
операция, заключающаяся в добавлении файла вGit
промежуточная область, давайте выполним:
# 下面三个命令都可以将test.txt添加到暂存区
git add test.txt
git add .
git add all
повторное использованиеgit status
Проверьте статус, следующее указывает на то, что он был добавлен во временную область.
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test.txt
Следующим шагом является отправка файлов из промежуточной области в репозиторий с помощьюgit commit
команда, после-m
Указывает краткое описание.
git commit -m "添加test.txt文件"
После отправки результат такой:
[master 23811d4] 添加test.txt文件
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.txt
В приведенном выше запросе результата23811d4
Указывает на это представлениеID
,этоID
на самом деле это хэш SHA1 группы из 40 шестнадцатеричных цифр, а приведенный выше результат показывает только первые 7 цифр идентификатора коммита.
Здесь необходимо уточнить несколько понятий, т.工作区
,暂存区
,版本库
, все каталоги проекта, мы называем его工作区
, а в этом каталоге.git
скрытый каталог, мы называем этот каталог版本库
,暂存区(stage)
даGit
уникальная концепция,暂存区
да版本库
Часть отношений между этими тремя мы показываем на следующем рисунке:
Если вы хотите удалить файл из промежуточной области, вы можете использовать следующую команду:
git rm --cached test.txt
Управление филиалом (филиалом)
мы знаем, что вGit
, каждое предложение производит40
состоит из шестнадцатеричных цифрSHA1
Хэш-значения, и временная шкала, образованная этими значениями, является ветвью, в приведенной выше демонстрации мы былиGit
изmaster
на ветке.
master
даGit
ветвь по умолчанию, кромеmaster
Кроме того, мы произвольно создаем свою ветку, ветка всегда указывает на последний коммит (commit
), пока вGit
В репозитории еще есть указательHEAD
, по умолчанию указывает на текущую ветку, поэтому связь между веткой, HEAD и фиксациейHEAD
указатель на последний коммит текущей ветки (commit
), и воляHEAD
Сохранить как.git/HEAD
в файле.
На приведенной ниже диаграмме мы можем лучше понять различные ветки, коммиты иHEAD
Отношение:
создать ветку
существуетgit branch
следовать команде分支名
Вы можете создать новую ветку на основе текущей ветки, например:
git branch deveolp
Посмотреть ветку
git branch
Результат выполнения следующий:
develop
* master
Вы также можете использовать следующий метод для просмотра списка ветвей
$ git show-branch
! [develop] develop
* [master] develop
--
+* [develop] develop
кассовое отделение
пройти черезgit branch
После того, как команда создала ветку,Git
не будет проверять ветку для нас, мы можем использоватьgit checkout
Команда для проверки ветки, чтобы вы могли разрабатывать в этой ветке, например:
$ git checkout develop
Если извлеченная ветка не существует, будет сообщено об ошибке, например, если мы извлечем несуществующую веткуdev
ветке будет выдано следующее сообщение об ошибке:
error: pathspec 'dev' did not match any file(s) known to git
Если вы хотите напрямую создать ветку на основе текущей ветки, когда ветка проверки не существует, вы также можетеgit checkout
следите за параметрами-b
,как:
git checkout -b dev
Таким образом, ветку можно создать напрямую.Конечно, если ветка уже существует, будет сообщено об ошибке, например:
git checkout -b develop
Поскольку мы создалиdevelop
, поэтому сообщается следующая ошибка:
fatal: A branch named 'develop' already exists.
удалить ветку
Для нежелательных ветвей вы можете использоватьgit branch -d
команда для удаления, например:
git branch -d develop
Принудительно удалить
git branch -D develop
объединить ветвь
Когда мы закончим разработку, отdevelop
Объединить вmaster
, операция должна быть сокращена доmaster
под веткой, вmaster
Выполните команду слияния.
git merge develop
Простое управление тегами (тегами)
Git
Поддерживает маркировку (tag
) операции, метки иногда называют вехами. Когда мы развиваемся до определенного этапа и получаем определенные результаты, мы можем поставить метку на текущую ветвь. Например, когда мы достигаем определенного этапа разработки, мы можем поставить метку на филиал.v1.0
этикетка, указывающая1.0
Версия завершена.
просмотреть все теги
Перед маркировкой давайте посмотрим, как просмотреть все теги, такие как:
$ git tag
v1.0
v1.1
v1.2
v2.3
Приведенная выше команда просто отобразит все простой список тегов, если вы хотите увидеть описание тегов, вы можете сделать это
$ git tag -n1
v1.0 develop
v1.1 develop
v1.2 develop
v2.3 develop
Просмотр локальных тегов с использованием подстановочных знаков
$ git tag -l v1.*
v1.0
v1.1
v1.2
Создать ярлыки
Существует несколько способов создания этикеток:
git tag <tag_name> [commit_id]
git tag -a <tag_name> [commit_id]
git tag -m message <tag_name> [commit_id]
git tag -s <tag_name> [commit_id]
git tag -u <key> <tag_name> [commit_id]
Безcommit_id
, создание неуказанногоtag
:
git tag v1.0
использовать-a
Добавьте описание метки к параметру, этот метод попадет вvim
Редактор позволяет нам ввести описание:
git tag -a v1.1
в определенномcommit
тег сверху
git tag v1.2 c22be11
убрать тэг
Git
Метки нельзя изменять. Если нас не устраивает метка, мы можем удалить метку и создать ее снова. Оператор удаления метки выглядит следующим образом:
git tag -d v1.2
игнорировать специальные файлы
Во время разработки проекта есть некоторые файлы, которые мы не хотим добавлять в репозиторий для контроля версий, напримерIDE
Автоматически сгенерированные файлы конфигурации, файлы конфигурации базы данных проекта или временные каталоги, сгенерированные после компиляции и т. д.
На этом этапе мы можем добавить в рабочий каталог.gitignore
файл, чтобы указать, какие каталоги или файлы игнорировать, и установить.gitignore
файл добавлен в репозиторий, потому что.gitignore
Файл должен иметь контроль версий.
Конечно, кроме как через.gitignore
В дополнение к спецификации файла для игнорирования файлов, его также можно указать непосредственно через командную строку.
Игнорировать расположение файла
Корневой каталог рабочей области
Создается в корневом каталоге рабочей области.gitignore
Файлы — наиболее распространенный способ управления файлами для всего проекта.
Подкаталог рабочей области
создать в подкаталоге.gitignore
файл для перезаписи верхнего каталога.gitignore
Влияние правил игнорирования на текущий каталог.
Глобальная конфигурация
После того, как мы создадим файл игнорирования в рабочей области, если мы передадимpush
Если операция проталкивает проект в удаленный репозиторий, то файл игнора также должен быть запушен, и другие разработчики здесь получат такие же правила игнорирования.Если иногда правила игнорирования уникальны только для нас локально и не хотят делиться с другие, то мы можем настроить глобал следующим образом
git config --global core.excludesfile ~/.gitignore
.git/info/exclude
существует.git/info/exclude
Вы также можете добавить правила игнорирования, этот метод обычно не используется и является глобальным..gitignore
Как и файлы, этот метод уникален локально и не будет использоваться совместно с другими разработчиками.
Git игнорирует приоритет правила
Так как существует так много способов указать.gitignore
файл, затем другой.gitignore
Существуют разные приоритеты, и их приоритеты от высокого к низкому следующие:
-
Прочитайте самые высокие доступные правила игнорирования из командной строки.
-
Правила, определенные текущим каталогом
-
Правила, определяемые родительским каталогом, рекурсивно до корневого каталога рабочей области.
-
.git/info/exclude
правила, определенные в файле -
core.excludesfile
Глобальные правила, определенные в
Игнорировать синтаксис файла
#
: # для описания комментария
*
: Подстановочный знак, представляющий любое количество символов.
?
: представляет любой символ.
!
: указывает, что файл или каталог нельзя игнорировать.
/
:/
Когда позиция начинается в начале строки, это означает игнорировать файлы в этом каталоге и не игнорировать файлы с таким же именем в других подкаталогах./
Последняя позиция строки позиции означает, что игнорируется только каталог, а файл с таким же именем не игнорируется.
[abc]
: необязательный диапазон символов
Пример
# 这是一行注释
a* #忽略任何以a开头的文件和目录
!action # 不忽略action文件
/verdor #忽略根目录下的verdor文件
Игнорировать файлы работает только для неотслеживаемых файлов
Игнорирование файлов влияет только на неотслеживаемые файлы.Если файл был отправлен в репозиторий, добавление файла в игнорируемый файл не будет иметь никакого эффекта.
резюме
На самом деле, независимо от того, программист вы или нет, вы можете поставитьGit
В качестве инструмента для управления собственными документами или кодом, используяGit
, мы можем более эффективно управлять и организовывать наши собственные проекты и документы, и мы не боимся потери документов при постоянном изменении и изменении.
Если вы считаете, что статья хороша, отсканируйте код, чтобы следовать ему. Ваше внимание — самая большая мотивация для моего письма.