Debian配置Git

2024-02-01 67

Git 是近年来被广泛采用的版本控制系统工具,主要因为 Git 可以同时处理本地和远程源代码管理,而且非常适合团队协作开发。使用 Git,用户可以轻松地跟踪文件的变化、回退到历史版本、分支管理、合并代码等操作,非常方便。Debian 能够提供免费的 Git 服务,本文将介绍一些Debian的Git相关配置。

一、Git软件包

git 相关包和命令列表:

软件包 流行度 大小 命令 说明
git V:345, I:547 46734 git(7) Git 快速、可扩展、分布式的版本控制系统
gitk V:5, I:34 1838 gitk(1) 有历史功能的 Git 图形仓库浏览器
git-gui V:1, I:18 2429 git-gui(1) Git 图形界面(无历史功能)
git-email V:0, I:10 1087 git-send-email(1) 从 Git 用电子邮件发送收集到的补丁
git-buildpackage V:1, I:9 1988 git-buildpackage(1) 用 Git 自动制作 Debian 包
dgit V:0, I:1 484 dgit(1) Debian 档案库的 git 交互操作
imediff V:0, I:0 169 git-ime(1) 交互式的分开 git 提交的辅助工具
stgit V:0, I:0 601 stg(1) 封装的 git (Python)
git-doc I:12 13208 N/A Git 官方文档
gitmagic I:0 721 N/A Git 魔术,易于理解的 Git 手册

二、配置Git客户端

可以在 “~/.gitconfig” 里面设置几个 Git 接下来需要使用的全局配置,比如说名字和电子邮件地址。

$ git config --global user.name "Name Surname"
$ git config --global user.email yourname@example.com

也可以按如下所示定制 Git 的默认行为。

$ git config --global init.defaultBranch main
$ git config --global pull.rebase true
$ git config --global push.default current

如果习惯使用 CVS 或 Subversion 命令,也许希望设置如下几个命令别名。

$ git config --global alias.ci "commit -a"
$ git config --global alias.co checkout

能够通过如下方式检查全局配置:

$ git config --global --list

三、基本Git命令

Git 操作涉及以下几个数据:

1、工作树目录保持面向用户的文件,可以对这些文件做修改。需要被记录的改变,必须明确的被选择并暂存到索引。这是 git add 和 git rm 命令。

2、索引保持暂存文件。在接下来的请求之前,暂存文件将被提交到本地仓库。这个是 git commit 命令。

3、本地仓库保持已经提交的的文件。

  • Git 记录提交数据的链接历史并在仓库里面将它们作为分支组织;
  • 本地仓库通过 git push 命令发送数据到远程仓库;
  • 本地仓库能够通过 git fetch 和 git pull 命令从远程仓库接收数据;
  • git pull 命令在 git fetch 后执行 git merge 或 git rebase 命令;
  • 这里,git merge 联合两个独立分支的历史结尾到一个点;(在没有定制的 git pull ,这个是默认的,同时对上游作者发布分支到许多人时,也是好的 )
  • 这里,git rebase 创建一个远程分支的序列历史的单个分支,跟着本地分支。(这是定制 pull.rebase true 的情况,对我们其余的用途有用。)

4、远程仓库保持已经提交的文件。到远程仓库的通信,使用安全的通信协议,比如 SSH 或 HTTPS。

工作树是在 .git/ 目录之外的文件。在 .git/ 目录里面的文件,包括索引、本地仓库数据和一些 git 配置的文本文件。

这里是主要的 Git 命令概览:

Git 命令 功能
git init 创建(本地)存储库
git clone URL 克隆远程存储库到本地仓库工作目录树
git pull origin main 通过远程仓库 origin 更新本地 main 分支
git add . 增加工作树里面的文件仅作为预先存在的索引文件
git add -A . 增加工作树里面的所有文件到索引(包括已经删除的)
git rm filename 从工作树和索引中删除文件
git commit 提交在索引中的暂存改变到本地存储库
git commit -a 添加工作树里的所有的改变到索引并提交它们到本地仓库(添加 + 提交)
git push -u origin branch_name 使用本地 branch_name 分支更新远程仓库 origin(初始启用)
git push origin branch_name 使用本地 branch_name 分支更新远程仓库 origin(随后调用)
git diff treeish1 treeish2 显示 treeish1 提交和 treeish2 提交的不同
gitk VCS 存储库分支历史树的图形界面显示

四、Git技巧

下面是一些 Git 技巧:

Git 命令行 功能
gitk --all 参看完整的 Git 历史和操作,比如重置 HEAD 到另外一个提交、挑选补丁、创建标签和分支……
git stash 得到一个干净的工作树,不会丢失数据
git remote -v 检查远程设置
git branch -vv 检查分支设置
git status 显示工作树状态
git config -l 列出 git 设置
git reset --hard HEAD; git clean -x -d -f 反转所有工作树的改变并完全清理它们
git rm --cached filename 反转由 git add filename 改变的暂存索引
git reflog 获取参考日志(对从删除的分支中恢复提交有用)
git branch new_branch_name HEAD@{6} 从 reflog 信息创建一个新的分支
git remote add new_remote URL 增加一个由 URL 指向的远程仓库 new_remote
git remote rename origin upstream 远程仓库的名字从 origin 重命名到 upstream
git branch -u upstream/branch_name 设置远程跟踪到远程仓库 upstream 和它的分支名 branch_name
git remote set-url origin https://foo/bar.git 改变 origin 的 URL
git remote set-url --push upstream DISABLED 禁止推送到 upstream(编辑 .git/config 来重新启用)
git remote update upstream 获取 upstream 仓库中所有远程分支更新
git fetch upstream foo:upstream-foo 创建本地(可能是孤立的)upstream-foo 分支,作为upstream 仓库中 foo 分支的一个拷贝
git checkout -b topic_branch ; git push -u topic_branch origin 制作一个新的 topic_branch 并把它推送到 origin
git branch -m oldname newname 本地分支改名
git push -d origin branch_to_be_removed 删除远程分支(新的方式)
git push origin :branch_to_be_removed 删除远程分支(老的方式)
git checkout --orphan unconnected 创建一个新的 unconnected 分支
git rebase -i origin/main 从 origin/main 重新排序、删除、压缩提交到一个干净的分支历史
git reset HEAD^; git commit --amend 压缩最后两个提交为一个
git checkout topic_branch ; git merge --squash topic_branch 压缩整个 topic_branch 到一个提交
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' 反转一个浅克隆到一个所有分支的完整克隆
git ime 分开最后的提交到一系列单个逐一文件的小提交。(要求 imediff
git repack -a -d; git prune 本地仓库重新打包到一个单独的包中(这可能限制从删除分支里面恢复丢失数据等机会)

注意:

  • 不要使用带空格的标签字符串。即使一些工具,如 gitk(1) 允许使用它,但会阻碍其它 git 命令;
  • 如果一个本地分支推送到一个已经变基或者压缩过的仓库,推送这样的分支有风险,并要求 –force 选项。这通常对 main 分支来说不可接受,但对于一个移植到 main 分支前的特定分支,是可以接受的;
  • 从命令行通过 “git-xyz” 直接调用 git 子命令的方式,从 2006 年早期开始就被取消。

如果有一个可执行文件 git-foo 在路径环境变量 $PATH 里面,在命令行输入没有中划线的 “git foo”,则将调用 git-foo.这是 git 命令的一个特性。

五、其它的版本控制系统

版本控制系统(VCS )有时被认为是修订控制系统 (RCS), 或者是软件配置管理程序 (SCM)。

这里是 Debian 系统上著名的其它非 Git 的 VCS 汇总:

软件包 流行度 大小 工具 VCS 类型 描述
mercurial V:4, I:33 2019 Mercurial 分布式 mercurial 主要是用 Python 写的还有一部分是 C 写的
darcs V:0, I:5 34070 Darcs 分布式 有智能代数补丁的 DVCS(慢)
bzr I:8 28 GNU Bazaar 分布式 受 tla 启发并且是用 Python 写的 DVCS (历史)
tla V:0, I:1 1022 GNU arch 分布式 主要由 Tom Lord 写的 DVCS (成为历史的)
subversion V:12, I:74 4837 Subversion 远程 ”比 CVS 做的好“,远程 VCS 的新标准(历史)
cvs V:4, I:30 4753 CVS 远程 以前的远程 VCS 标准(历史)
tkcvs V:0, I:1 1498 CVS, … 远程 VCS (CVS,Subversion,RCS) 存储库树的图形界面显示
rcs V:2, I:13 564 RCS 本地 比 Unix SCCS 做的好(历史)
cssc V:0, I:1 2044 CSSC 本地 Unix SCCS 的克隆(历史)
  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。