Debian配置Git方法与技巧

更新时间:2024-11-09 09:39:50

访问次数:100

详细介绍

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

一、Git软件包

git 相关包和命令列表:

软件包流行度大小命令说明
gitV:345, I:54746734git(7)Git 快速、可扩展、分布式的版本控制系统
gitkV:5, I:341838gitk(1)有历史功能的 Git 图形仓库浏览器
git-guiV:1, I:182429git-gui(1)Git 图形界面(无历史功能)
git-emailV:0, I:101087git-send-email(1)从 Git 用电子邮件发送收集到的补丁
git-buildpackageV:1, I:91988git-buildpackage(1)用 Git 自动制作 Debian 包
dgitV:0, I:1484dgit(1)Debian 档案库的 git 交互操作
imediffV:0, I:0169git-ime(1)交互式的分开 git 提交的辅助工具
stgitV:0, I:0601stg(1)封装的 git (Python)
git-docI:1213208N/AGit 官方文档
gitmagicI:0721N/AGit 魔术,易于理解的 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 提交的不同
gitkVCS 存储库分支历史树的图形界面显示

四、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 类型描述
mercurialV:4, I:332019Mercurial分布式mercurial 主要是用 Python 写的还有一部分是 C 写的
darcsV:0, I:534070Darcs分布式有智能代数补丁的 DVCS(慢)
bzrI:828GNU Bazaar分布式受 tla 启发并且是用 Python 写的 DVCS (历史)
tlaV:0, I:11022GNU arch分布式主要由 Tom Lord 写的 DVCS (成为历史的)
subversionV:12, I:744837Subversion远程”比 CVS 做的好“,远程 VCS 的新标准(历史)
cvsV:4, I:304753CVS远程以前的远程 VCS 标准(历史)
tkcvsV:0, I:11498CVS, …远程VCS (CVS,Subversion,RCS) 存储库树的图形界面显示
rcsV:2, I:13564RCS本地比 Unix SCCS 做的好(历史)
csscV:0, I:12044CSSC本地Unix SCCS 的克隆(历史)