百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

git环境配置和.gitconfig配置文件详解

bigegpt 2024-10-29 13:01 12 浏览

Git是一个非常酷的工具,截止目前已经远远超越了其作为版本管理(VCS)的初衷,成了集版本管理、项目管理、开发流程、CI/CD,DevOps,协作社交为一体的综合性工具了。Git的开始也很简单,只需安装一个客户端,注册一个公共服务器账号(如Github,Gitee等)、Web下创建一个项目。clone项目到本地,然后就开始了。刚开始只需学一些简单的命令:clone、add,commit,checkout,push,pull,status和diff然后就足矣应付你日常的工作了。随着工作的深入,你可能需要学习分支、tag标签、等操作和概念。你使用git越多,你就会学习能学习到更多的git命令宝藏,比如blame, bisect,rebase、reset,reflog,submodules, hooks等等,这些工具的使用和概念介绍等,虫虫之前的文章中曾经做过介绍,关注虫虫可以看得到。

在git使用和我们的gitlab群中有一个常出现的问题,让很多初学者迷惑,那就是关于git的配置。为此今天虫虫专门撰写本文来介绍下git的基本配置,以帮助大家解疑你遇到一些莫名其妙的问题,答惑为什么会出现这样的问题。而实际中这些的出现仅仅是因为你使用了不一样的配置,而你却不知道。

git的配置文件

当你在git服务器Web管理页面创建完第一个项目的时候,接下来的一个页面会提示你做一些基本的git配置,比如github的提示页面如下:

你按照提示这些命令中有一个蓝色标注的git remote add命令。实际提到这些命令配置还比较繁琐,你可以用clone在你的机器上直接创建一个空项目,忽略到上面提示中这许多步骤。

git commit提交历史时候,提示你需要配置global参数,设置你的邮箱地址和名称(注意这个和你git服务器的账号可以不同哦,仅仅用于在git历史中显示):

git config --global user.email"you@example.com"

git config --global user.name"你的名字"

运行这两个命令后,你就可以执行commit

然后你push推送到github

你设置的用户名,比如此例中的"虫虫"会出现在commit历史中,看github提交历史:

注意该过程需要你github的用户名和密码认证一下,该用户名也可以缓存在本地的配置文件中([credential]部分),如果你用户名输入有误,则需要清除这个,不然后续认证会有问题。

上面提到的git remote add 和git config设置的参数是加上都是配置在git的配置文件中的。其中git remote添加的仓库Url链接信息是保存在项目目录.git/config文件中,这是项目级的配置文件。而git config设置的global信息保存在用户级的配置文件中,该文件的位置为用户目录~/.gitconfig。实际上git还有一个系统级的配置文件,该文件位于/etc/gitconfig。配置文件生效生效优先级是先项目(.git/config),后用户(~/.gitconfig),最后系统(/etc/gitconfig)。由于git的使用都是以用户级的,所以我们日常用的最多都是通过用户级别的配置,本文主要是用户级别配置文件的介绍。

git配置文件详解

别名

git别名是我们日常进行git配置使用最多的一部分内容。在git使用中,为了便捷,减少输入,git提供了别名机制来将标准的git命令自定义为自己习惯使用的命令。我们可以将git的命令设定别名为为1或2个字母的快捷方式。

例如:

[alias]

amend = commit --amend

amendf = commit --amend --no-edit

br = branch

ct = commit

co = checkout

cp = cherry-pick

df = diff

ds = diff --staged

l = log

lg = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative

lp = log --pretty=oneline

sa = stash apply

sh = show

ss = stash save

st = status

此处我们按字母顺序排列别名。注意到这个log命令lg,我们美化了log的显示,是的lgo显示更加好看美,简洁的图表,说明了仓库库随着时间的推移如何演变。

配色

给你的工作终端设置一个好看的颜色也是每一个码农一直孜孜以求的目标,那就看本部分:

[color]

ui = auto

[color "branch"]

current = yellow reverse

local = yellow

remote = green

[color "status"]

added = yellow

changed = green

untracked = cyan

[color "diff"]

meta = yellow

frag = magenta bold

commit = yellow bold

old = red bold

new = green bold

whitespace = red reverse

[color "diff-highlight"]

oldNormal = red bold

oldHighlight = red bold 52

newNormal = green bold

newHighlight = green bold 22

ui = auto是UI的默认设置。它在输出直接到终端时为输出着色,但在输出重定向到管道或文件时会省略颜色控制代码,以免导致问题。分支和状态部分正在以下列方式更改git branch和git status命令的输出颜色。

diff和diff-highlight设置将在执行diff命令时候系统展示的颜色。对于diff,也可以使用一些第三方的插件,比如diff-so-fancy工具,显示更加好看,下面是diff-so-fancy工具官方库主页的介绍对比截图:

核心

[core]

editor = vim

excludesfile = ~/.gitignore

pager = diff-so-fancy | less --tabs=4 -RFX

autocrlf = input

核心设置部分包含与git相关的各种不同设置。我们设置到的部分有:

editor = vim设置要用于编辑提交消息的编辑器(如果未设置此值,git将首先尝试从环境变量VISUAL或EDITOR读取你当前的编辑器,如果获取不到,最终会使用vi)。

excludesfile =~/.gitignore允许指定全局性质的.gitignore文件。每个git存储库都可以设置特定的项目级别的.gitignore文件,该文件指定要从版本控制中排除的文件。但很多时候,每个git存储库中的一些文件都是相同的(例如,macOS上的.DS_Store,或者当你是Python开发人员时是*.pyc),为了避免重复设置,可以设置全局性质的.gitignore,该设置就会对该用户下所有的项目都生效。

pager = diff-so-fancy | less --tabs = 4 -RFX指定要用于显示git log,git diff和git show命令输出的工具。默认情况下,git使用的是less。该配置中我们指定使用diff-so-fancy。

autocrlf = input。 由于Windows使用的是与Unix和MacOS不同的行结尾,如果来自不同操作系统的人员提交到同一个存储库,则可能会造成一些混乱。关于换行设置三种操作系统(windows,linux和macOS)的是不一样的:

MacOS/Linux设置:autocrlf = input

Windows上的autocrlf = true)。

凭据

[credential]

helper = cache --timeout=28800

凭据部分用来指定希望你需要默认保存的账号和密码。默认情况下,git根本不会包存储凭据,所以,每次连接时(http(s)性质的仓库)都会提示输入用户名和密用,这会很麻烦,你可以在此处设置保存户名密码,这样就可以不用每次都输入了(当然最好方式,是用ssh证书方法,即安全又方便)。凭据一般可以通过两种方式保存,保存在带有store选项的文件中(它将使用你的凭据创建纯文本文件),或使用cache选项将它们存储在内存中。当然根据你系统不同,还可以使用第三方的方式,比如MacOS下的osxkeychain,Windows下的Git Credential Manager)。此处我们使用的是,通过内存cache的方式,默认是15分钟,此处我们设置为8小时。

设置后,在输入用户名密码一次后,再push就不需要认证了。

推送

[push]

default = current

git push命令中包含分支的名称,如果你没有添加,可能导致意外的行为(例如我正在开发dev分支,但不小心,push到了master分支)。为了防止这种错误,我给push设置了default = current选项。现在,如果忘记包含分支的名称,git将尝试推送到具有相同名称的分支。如果它在远程库中找不到具有相同名称的分支,会新创建一个。

本文中,我们给出了git常见设置,示例介绍了从创建项目到对你git环境的配置,.gitconfig配置文件和设置的方法。更多的信息可以参考git-config官方文档页面,他有更详细的选贤说明。

当然获取配置文件最好的方法莫过搜索引擎了,我给你关键字"gitconfig dotfiles",其他的就看需要什么样的了。本文所有配置示例文件,见我们上面截图中的github的git-configure项目,大家可以参考学习。

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...