Git 为什么要创建多层级账户体系?

2023-05-22 15:53:48 +08:00
 huzhikuizainali

我看文章中说 git 有三级账户体系,system>global>local ,为什么要这样?

在我脑海中 git add--》 git commit 都是一套账户体系下完成。目的不就是单纯管理一套代码么?如果管理多个项目代码,也可以设立一套机制来在一个用户名下管理啊。就好比百度云盘备份,可以在一个账号下通过划分文件夹来管理不同类型的资料备份。

如果要区分私人和公司的代码,那也可以通过 git 登陆不同的账户来实现,就像你有私人 qq 账号,还有一个公司 qq 账号。

在什么工作场景下非要要通过账号层级的区分不可呢?

用过多级账号的老师可否指点一下?

870 次点击
所在节点    git
10 条回复
zbinlin
2023-05-22 16:24:16 +08:00
你指的是 config 吗?
MetroWind
2023-05-22 16:44:57 +08:00
把文章关了,看官方文档去。
huzhikuizainali
2023-05-22 17:17:32 +08:00
@zbinlin 是的。
我刚刚看了其他资料。内容大概如下

system ,管理这台计算机上的代码

global ,管理本机当前登录账号下的代码

local ,管理指定文件夹中的代码。

local 比较好理解。你在 A 文件夹下通过 git bash ,git 初始化以后。git 就监控 A 文件夹下的所有文件变动。.git 文件夹也存放在 A 文件夹下。

那 global 账号建立以后 git 难道监控本机所有文件夹下的文件变动?这不现实吧?所以 global 账号是如何使用的呢?
zbinlin
2023-05-22 18:31:27 +08:00
@huzhikuizainali 不要用账号去理解它,这里面没有账号的概念,只是不同的作用域的配置项而已。
wdssmq
2023-05-23 13:38:10 +08:00
多层级 config 体系 √

user.name 和 user.email 也只是 config 中的两个 option ,和你的 github 账号并没有直接关系,除非上 GPG 签名;

之前就有过有人把这个写成 Linus 然后搞事;

为什么 Github 允许冒充别人的身份 Commit ? - 知乎
https://www.zhihu.com/question/280774106

config 、option 、setting 这三者在程序世界里是什么区别? - 知乎
https://www.zhihu.com/question/39827177

可以执行下边命令初始化一个仓库:

git init
git config user.name "xxxx"
git config user.email "xxxx@abc.com"

# 后两句可以在每个项目文件夹内都执行设置,但也挺麻烦的……多层级 config 体系 √

user.name 和 user.email 也只是 config 中的两个 option ,和你的 github 账号并没有直接关系,除非上 GPG 签名;

之前就有过有人把这个写成 Linus 然后搞事;

为什么 Github 允许冒充别人的身份 Commit ? - 知乎
https://www.zhihu.com/question/280774106

config 、option 、setting 这三者在程序世界里是什么区别? - 知乎
https://www.zhihu.com/question/39827177

可以执行下边命令初始化一个仓库:

git init
git config user.name "xxxx"
git config user.email "xxxx@abc.com"

# 后两句如果在每个新项目内都执行一次的话也挺麻烦的

git config --global user.name "xxxx"
git config --global user.email "xxxx@abc.com"

# ↑这样可以只设置一次,作用域下的项目会直接继承,除非你在项目内重新设置了


git config --global user.name "xxxx"
git config --global user.email "xxxx@abc.com"

# ↑ 这样可以只设置一次,作用域下的项目会默认沿用,
wdssmq
2023-05-23 13:40:35 +08:00
@wdssmq 想全选覆盖一次的,操作失误了 - -
huzhikuizainali
2023-05-23 14:28:34 +08:00
@wdssmq
谢谢回复

user.email 也只是 config 中的两个 option ,和你的 github 账号并没有直接关系,除非上 GPG 签名————前半句,理解。但 GPG 签名是什么意思?

设置 global 账户后。这样可以只设置一次,作用域下的项目会默认沿用。 这样就不需要像 local 账户那样逐个项目,逐个文件夹去 git add 。去 git commit 了对吧—————————但是 global 账户会监控电脑上所有文件夹的变动么?如果不是,如何让 git 只监控我想让它监控的代码文件夹呢?
wdssmq
2023-05-23 15:13:31 +08:00
global 和 local 是 config 概念,不是「账户」。。。。。。。。

以 git 自身来说,它是没有「监控」这个概念的;

你需要在一个文件夹路径内「主动」执行 git XX 命令,git 程序会在当前目录或者上层目录寻找 .git 文件夹,以含有 .git 文件夹的目录为根目录,然后执行相应操作;

如果没能找到 .git 文件夹,就会报错:

> fatal: not a git repository (or any of the parent directories): .git
huzhikuizainali
2023-05-23 15:32:11 +08:00
@wdssmq 谢谢回复。

关于我说的账户:请看如下命令
git config --local user.name 'zhangsan'
git config 一 local user. email 'zhangsan@email.com'
当你以这个帐号,去进行 git add git commit git status 这些命令的作用范围仅限于你最初用 git init 生成“.git 文件夹” 所在的文件夹 。除此以外的文件夹,即便你修改了代码后,用 git status 去查询,看看不到任何 modifeid 的记录。因为 git 不会“监控”其它文件夹的变化-------------以上理解没错的话。

那么 当你 git config --global user.name 'lisi'
git config 一 global user. email 'lisi@email.com' 后。据说这样可以不用“逐个项目进行提交” 可以 “一次提交所有的项目”。 我对此理解不深。请问 ‘lisi’ 的 git 命令作用范围是如何限定的?用起来了 zhangsan 用起来有何不同?
wdssmq
2023-05-23 16:03:25 +08:00
请不要在每一个回复中都包括外链,这看起来像是在 spamming

- -

config 可以看作是美国的法律,golobal 和 local 可以看作是国家法律和州法律,这种感觉?

具体的 git add 操作可以看作是开车,启动,加速,刹车,熄火,停车还是要你自己操作的,具体的交通法则是由 config 决定的;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/941958

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX