Как программист, я обязательно отдам большую часть своей жизни Github, который в шутку называют крупнейшим в мире сайтом гей-знакомств. Почему? Потому что программистам нужна система контроля версий (VCS) для управления кодом. Таким образом, программисты могут отслеживать детали изменений в проекте, возвращать выбранные файлы в предыдущее состояние и кодировать вклады различных участников в совместные проекты с несколькими людьми. Эта статья представляет собой предварительное исследование программного обеспечения для контроля версий Git, которое может полностью поддерживать ежедневную совместную разработку несколькими людьми.
Введение
система контроля версий
система контроля версий(Version Control System) — это система для записи изменений в содержимом одного или нескольких файлов для дальнейшего использования при ревизии той или иной версии. Его можно использовать не только для управления исходным кодом программного обеспечения, но и для большинства файлов (Двоичные файлы не поддерживают инкрементные коммиты) для контроля версий. Его развитие прошло три этапа, а именно локализацию, централизацию и распространение. По сравнению с самой простой и грубой практикой копирования всего проекта для сохранения разных версий, эти три этапа постоянно оптимизируют недостатки первого, делая контроль версий все более совершенным.
- Локализованная система контроля версий
Локализованная система контроля версий использует некую простую базу данных для записи различий между предыдущими обновлениями файла. Это решает проблемы слишком больших файлов резервных копий в исходной системе грубой версии, неудобного сравнения и сложного управления. Типичный представитель называетсяRCS, его принцип работы заключается в сохранении набора исправлений на жестком диске (исправление относится к изменениям до и после ревизии файла, что также называется дифференциальным кодированием); применяя все исправления, содержимое файла каждой версии может быть пересчитано.
TIPS дифференциальное кодирование(
Delta encoding
), также известное как инкрементное кодирование, относится к способу хранения или отправки данных в виде различий данных между последовательными данными (в отличие от хранения и отправки полных файлов). Этот метод широко используется, например, просмотр истории изменений файлов (системы контроля версий: RCS, SVN, Git), удаленное дифференциальное сжатие в Windows, онлайн-резервное копирование, механизм синхронизации master-slave в Mysql, сохраняемость AOF в Redis и т. д.
- Централизованная система контроля версий
Централизованная система контроля версий (Centralized Version Control System) использует один централизованно управляемый сервер для хранения версий всех файлов, и все, кто работает вместе, подключаются к этому серверу через клиентов для получения последних файлов или отправки обновлений. Это решает проблему совместной работы нескольких человек. Типичными его представителями являются SVN, CVS и Perforce.
- Распределенная система контроля версий
Распределенная система контроля версий (Distributed Version Control System) В дополнение к сохранению полной исторической информации о версии на сервере, полная история проекта сохраняется на любом клиенте. Решает проблему единой точки отказа сервера или поврежденного диска центральной базы данных. Типичными его представителями являются Git, Mercurial и др.
Введение в Git
Git — это распределенное программное обеспечение для управления версиями, изначально созданное Линусом Торвальдсом и выпущенное под лицензией GPL в 2005 году. Первоначальная цель состояла в том, чтобы лучше управлять разработкой ядра Linux. Преимущество заключается в том, что он быстрый и имеет отличные возможности отслеживания слияний. Есть небольшая история о его рождении.
Происхождение Git
В период с 2002 по 2005 год проект ядра Linux использовал проприетарную распределенную систему контроля версий под названием BitKeeper бесплатно для управления и поддержки своего кода. Поскольку программист по имени Эндрю Цую написал простую программу, которая может подключаться к репозиторию BitKeeper, владелец авторских прав BitKeeper был недоволен, и право сообщества ядра Linux на бесплатное использование BitKeeper было отозвано. После провала переговоров Линус Торвальдс потратил десять дней на написание первой версии Git для управления и поддержки исходного кода ядра Linux вместо BitKeeper.
Когда Git управляет проектами, существует три локальных рабочих области: рабочая область Git, промежуточная область и локальный репозиторий. Как показано ниже:.
- Рабочая область (рабочий каталог)
Рабочая область относится ко всем файлам в каталоге проекта, кроме папки .git. У файлов в этой рабочей области есть только два состояния: отслеживаемые файлы и неотслеживаемые файлы. Отслеживаемые файлы подразделяются на три состояния: зафиксировано, изменено и подготовлено. Состояние файла показано ниже: - Зона временного хранения (область рабочей области/индекса)
Промежуточная зона — это переходная зона из рабочей области в локальный склад. Соответствует файлу .git/index. - Локальный репозиторий
Сохраните отправленные данные.При отправке данные в этой области отправляются в удаленное хранилище.
Введение в GitHub
GitHu — это крупнейший хост-репозиторий Git и центр, где могут сотрудничать тысячи разработчиков и проектов. Большинство репозиториев Git размещены на GitHub, и многие проекты с открытым исходным кодом используют GitHub для хостинга Git, отслеживания проблем, проверки кода и других вещей. Грубо говоря, это использование GitHub в качестве удаленного репозитория и достижение синхронизации между локальным и удаленным хранилищами в квазиреальном времени. Таким образом, даже если в локальном хранилище возникает исключение, его можно устранить через удаленное хранилище.
Фактическая схема использования Git для управления версиями проекта:
на фотоworkspaceпредставляет текущую рабочую область,indexПредставляет область временного хранения, также называемую индексом,Repositoryпредставляет локальный репозиторий, аRemoteПредставляет репозиторий на удаленном сервере, здесь обычно имеется в виду сервер веб-сайта, такой как GitHub/Gitlab/Gitee.
Файловая структура Git
-
папка:
branches
-
hooks
Сценарий подключения клиента или сервера -
info
Сохраняет глобальный список игнорируемых шаблонов, которыми вы не хотите управлять в своем файле .gitignore. -
logs
Папка для хранения логов -
objects
Хранить объекты Git -
refs
Файл, в котором хранятся указатели (идентификаторы SHA-1) на отдельные ветки.
-
документ
-
HEAD
указать на текущую ветку -
config
Содержит параметры конфигурации для конкретного проекта. -
description
Только для использования программами GitWeb -
index
информация о промежуточной зоне сохраняется
-
Подробная работа с Git
-
git clone
Клонировать репозиторий с удаленного хоста# 用法 从版本库的网址上拷贝文件到本地文件夹 git clone <版本库的网址> <本地目录名> # 用例 支持多种文件协议 git clone http[s]://example.com/path/to/repo.git/ # http协议 git clone ssh://example.com/path/to/repo.git/ # ssh协议 git clone git://example.com/path/to/repo.git/ # git协议 git clone /opt/git/project.git # 本地文件 git clone file:///opt/git/project.git # 本地文件 git clone ftp[s]://example.com/path/to/repo.git/ # ftp协议 git clone rsync://example.com/path/to/repo.git/ # rsync协议
-
git remote
Управление удаленными именами хостов# 用法 git remote add <主机名> <网址> # 添加远程主机名 git remote rm <主机名> # 删除远程主机名 git remote rename <原主机名> <新主机名> # 更改原主机名 git remote show <主机名> # 显示主机名的详细信息
-
git fetch
Получить обновления репозитория удаленного хоста обратно в локальный (клон с нуля, выборка с нуля)git fetch <主机名> <分支名>
-
git branch/checkout/merge/rebase
Управление филиалами (Самая большая особенность Git)# 用法 查看分支情况 git branch -r # 查看远程分支 git branch -a # 查看所有分支,远程分支以remotes/开头 # 用法 创建新分支 git checkout -b newBranch origin/master # 在origin/master的基础上创建新分支 # 用法 合并分支 git merge origin/master # 将origin/master分支合并到本地分支 git rebase origin/master
-
git pull
Получить обновление ветки на удаленном хосте и объединить его с указанной веткой локальноgit pull <远程主机名> <远程分支名>:<本地分支名> # 等价于 git fetch <远程主机名> <远程分支名> git merge <远程主机名>/<远程分支名>
-
git push
Отправьте обновление локальной ветки на удаленный хостgit push <远程主机名> <本地分支名>:<远程分支名>
Практический бой под Linux (в качестве примера возьмем Ubuntu)
Установить
-
Установить Гит
sudo apt-get install git
-
Настроить SSH-ключи
# 以 yuguoliusheng@gmail.com 创建 ssh key,并将私钥保存在 github 文件中,公钥保存在 github.pub 文件中 ssh-keygen -C "yuguoliusheng@gmail.com" -f ~/.ssh/github
-
Настроить GitHub
Войдите в свой GitHub, нажмите «Настройки» => «Ключи SSH» => «Добавить ключ SSH» и добавьте открытый ключ в github.pub.
-
Проверка прошла успешно
# 执行命令 ssh -T git@github.com # 提示 Hi yuguoliusheng! You've successfully authenticated, but GitHub does not provide shell access.
-
Настроить личную информацию git
# 设置用户名 git config --global user.name "yuguoliusheng" # 设置email邮箱 git config --global user.email "yuguoliusheng@gmail.com"
Советы: Уровень конфигурации: Система / пользователь / Репозиторий проекта
- системный уровень
Установите файл /etc/gitconfig, действительный для каждого пользователя и каждого репозитория проекта на машине.git config --system user.name "yuguoliusheng"
- уровень пользователя
Установите файл $HOME/.gitconfig, действительный для каждого репозитория проекта текущего пользователя.
git config --global user.name "yuguoliusheng"
- Уровень репозитория проекта
Установите файл .git/config в текущем проекте, который действителен только для текущего репозитория проекта.
git config --local user.name "yuguoliusheng"
Его приоритет: уровень репозитория проекта > уровень пользователя > системный уровень.
- системный уровень
использовать
-
Создайте репозиторий кода для существующего проекта проекта
# 在项目 project 的根目录执行以下命令 # 创建README.md文件 echo "# Git 初探" >> README.md # 创建一个空的 git 版本库(创建 .git 文件夹) git init # 添加所有文件到暂存区域 git add * # 将暂存区域文件提交到本地仓库,并标注信息“initial project” git commit -m "initial project" # 添加远程主机名 origin,它代表网址 https://github.com/yuguoliusheng/introduce.git git remote add origin https://github.com/yuguoliusheng/introduce.git # 将本地的 master/main 分支推送到 origin 主机上的 master/main 分支,并设定 origin 为默认主机 git push -u origin master/main
-
Клонировать репозиторий с удаленного сервера на локальный
# 从 https://github.com/yuguoliusheng 上克隆 introduce.git 到本地 introduce 文件夹 git clone https://github.com/yuguoliusheng/introduce.git introduce
-
Игнорировать определенные файлы или папки
Некоторыми файлами не нужно управлять с помощью Git, и вы не хотите, чтобы они всегда отображались в списке неотслеживаемых файлов. Обычно некоторые автоматически сгенерированные файлы, такие как журналы или созданные в процессе компиляции и т. д. Вы можете создать файл .gitignore, чтобы заблокировать эти
```bash
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt, 但不包括 doc/server/arch.txt
```
-
Просмотр отправленных обновлений
# 查看提交的日志,并显示最近两次提交更新区别 git log -p -2
Опция Описание
-p
Отображает различия между каждым обновлением в формате исправления.
--stat
Отображает статистику модификации файла для каждого обновления.
--shortstat
Показывать только количество последних строк в --statmodified add remove stats.
--pretty
Отображать историческую информацию о фиксации в других форматах. Доступные варианты: однострочный, краткий, полный, более полный и формат (за которым следует указанный формат). -
сохранить текущую рабочую область
Сохранение в тайнике берет промежуточное состояние вашего рабочего каталога — то есть ваши измененные отслеживаемые файлы и промежуточные изменения — и сохраняет его в стопке незавершенных изменений, готовых к повторному применению.
```bash
# 存储当前工作空间,以方便进行切换
git stash
# 此时工作空间所有文件的状态就干净了,可以切换到其他工作空间
# 显示之前存储的工作空间
git stash list
# 重新启用存储的工作空间
git stash apply stash@2
# 移除存储的工作空间
git stash drop stash@2
# 从存储中创建分支
git stash branch testchanges
```
использованная литература
- Git Pro Второе издание
- Baidu Encyclopedia VCS.
- Википедия Гит
- Локальная система контроля версий RCS
- Дифференциальное кодирование Википедии
`Если эта статья полезна для вас или вас интересуют технические статьи, вы можете подписаться на общедоступный аккаунт WeChat: Technical Tea Party, вы можете получать соответствующие технические статьи как можно скорее, спасибо!
`
Эта статья опубликована на многопостовой платформеArtiPubавтоматическая публикация