当前位置: 首页 > news >正文

【玩转MacBook】Git安装

Git 官网也提到了MacBook 可以使用 Homebrew 安装 Git,所以在此使用 Homebrew 安装。

1、安装 Homebrew

执行安装脚本

在 Terminal 中执行如下命令:

/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

其实就是**执行作者写的一个脚本文件 install.sh。**这个脚本很方便,已经配置好了镜像源,如果上述命令执行成功就无需再配置镜像源。

安装的完整过程如下:

larryla@larryladeMacBook-Air ~ % /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
==> Checking for `sudo` access (which may request your password)...
Password:
==> You are using macOS 15.1.
==> We do not provide support for this pre-release version.
因为系统版本,可能会遇到一些未知问题==> The following new directories will be created:
/opt/homebrew/bin
/opt/homebrew/etc
/opt/homebrew/include
/opt/homebrew/lib
/opt/homebrew/sbin
/opt/homebrew/share
/opt/homebrew/var
/opt/homebrew/opt
/opt/homebrew/share/zsh
/opt/homebrew/share/zsh/site-functions
/opt/homebrew/var/homebrew
/opt/homebrew/var/homebrew/linked
/opt/homebrew/Cellar
/opt/homebrew/Caskroom
/opt/homebrew/Frameworks
==> The Xcode Command Line Tools will be installed.
==> 安装提示Mac下镜像飞速安装Homebrew教程(请收藏):https://brew.idayer.com/打个小广告
欢迎使用[快系列]教程,必出精品,安装有保障!- [快系列]stable-diffusion-webui: https://brew.idayer.com/install/stable-diffusion-webui
- [快系列]nvm快速安装教程: https://brew.idayer.com/install/nvm-for-nodejs安装遇到问题,请添加讨论群寻求Homebre的安装帮助。当然也非常欢迎大家加群聊天摸鱼,讨论mac、软件、摄影,扫码关注公众号:湖中剑,回复'brew'加群。█████████████████████████████████████
█████████████████████████████████████
████ ▄▄▄▄▄ █▀█ █▄▀▄ ▄ ▄▄██ ▄▄▄▄▄ ████
████ █   █ █▀▀▀█ ▀█▀▀▀▀▄▀█ █   █ ████
████ █▄▄▄█ █▀ █▀▀█▄▀ █▀▄ █ █▄▄▄█ ████
████▄▄▄▄▄▄▄█▄▀ ▀▄█▄▀ █▄▀ █▄▄▄▄▄▄▄████
████     ▀▄▄▄▄▀▄▀▄▄█▀▀█ █ ▀ ▀▄█▄▀████
████ ▀█▄▀▀▄  █▄█▀█ ▄██ █ ▀ ▄▄██▀█████
████ █   █▄ ▄ ▄█▄ ▀  ██ ▀ ▀▀▀▄ █▀████
████ ██▄██▄▀ █  ▄█▀ ▄▄▀▀ ▀ █▄█▄▀█████
████ ▄ ▀▄▄▄▀█▄ ▄▀     ▀ ▀█▀ ▀▀ █▀████
████ █ ▀▀▀▄█▄█▄█▀█▀▄ █▀▀▄▄█▄▄▄▄▀█████
████▄██▄▄█▄█▀▀▀█▄█▄ ▀▄▀█ ▄▄▄ ▀   ████
████ ▄▄▄▄▄ █▄▀  ▄█▄  ▄▀  █▄█  ▄▀█████
████ █   █ █ ▀▄▄ ▀▄ ▀███ ▄▄▄▄ ▄▀ ████
████ █▄▄▄█ █ ▄▄▀ ██▄▀▄▀▄ ▀▄   ▄ █████
████▄▄▄▄▄▄▄█▄▄█▄▄████▄█████▄▄█▄██████
█████████████████████████████████████
█████████████████████████████████████请按回车键(RETURN)继续安装,按其他任意按键取消安装
==> /usr/bin/sudo /usr/bin/install -d -o root -g wheel -m 0755 /opt/homebrew
==> /usr/bin/sudo /bin/mkdir -p /opt/homebrew/bin /opt/homebrew/etc /opt/homebrew/include /opt/homebrew/lib /opt/homebrew/sbin /opt/homebrew/share /opt/homebrew/var /opt/homebrew/opt /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions /opt/homebrew/var/homebrew /opt/homebrew/var/homebrew/linked /opt/homebrew/Cellar /opt/homebrew/Caskroom /opt/homebrew/Frameworks
==> /usr/bin/sudo /bin/chmod ug=rwx /opt/homebrew/bin /opt/homebrew/etc /opt/homebrew/include /opt/homebrew/lib /opt/homebrew/sbin /opt/homebrew/share /opt/homebrew/var /opt/homebrew/opt /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions /opt/homebrew/var/homebrew /opt/homebrew/var/homebrew/linked /opt/homebrew/Cellar /opt/homebrew/Caskroom /opt/homebrew/Frameworks
==> /usr/bin/sudo /bin/chmod go-w /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions
==> /usr/bin/sudo /usr/sbin/chown larryla /opt/homebrew/bin /opt/homebrew/etc /opt/homebrew/include /opt/homebrew/lib /opt/homebrew/sbin /opt/homebrew/share /opt/homebrew/var /opt/homebrew/opt /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions /opt/homebrew/var/homebrew /opt/homebrew/var/homebrew/linked /opt/homebrew/Cellar /opt/homebrew/Caskroom /opt/homebrew/Frameworks
==> /usr/bin/sudo /usr/bin/chgrp admin /opt/homebrew/bin /opt/homebrew/etc /opt/homebrew/include /opt/homebrew/lib /opt/homebrew/sbin /opt/homebrew/share /opt/homebrew/var /opt/homebrew/opt /opt/homebrew/share/zsh /opt/homebrew/share/zsh/site-functions /opt/homebrew/var/homebrew /opt/homebrew/var/homebrew/linked /opt/homebrew/Cellar /opt/homebrew/Caskroom /opt/homebrew/Frameworks
==> /usr/bin/sudo /usr/sbin/chown -R larryla:admin /opt/homebrew
==> /usr/bin/sudo /bin/mkdir -p /Users/larryla/Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Users/larryla/Library/Caches/Homebrew
==> /usr/bin/sudo /usr/sbin/chown -R larryla /Users/larryla/Library/Caches/Homebrew
==> Searching online for the Command Line Tools
==> /usr/bin/sudo /usr/bin/touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
==> Installing Command Line Tools for Xcode-16.2
==> /usr/bin/sudo /usr/sbin/softwareupdate -i Command\ Line\ Tools\ for\ Xcode-16.2
Software Update ToolFinding available softwareDownloading Command Line Tools for Xcode
Downloaded Command Line Tools for Xcode
Installing Command Line Tools for Xcode
Done with Command Line Tools for Xcode
Done.
==> /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools
Password:
Sorry, try again.
Password:
==> /usr/bin/sudo /bin/rm -f /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress==> Downloading and installing Homebrew...
remote: Enumerating objects: 288347, done.
remote: Counting objects: 100% (44/44), done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 288347 (delta 0), reused 44 (delta 0), pack-reused 288303
Receiving objects: 100% (288347/288347), 90.04 MiB | 6.20 MiB/s, done.
Resolving deltas: 100% (206656/206656), done.
From https://mirrors.ustc.edu.cn/brew* [new branch]            SMillerDev-patch-1                                 -> origin/SMillerDev-patch-1* [new branch]            cleaner-factory                                    -> origin/cleaner-factory* [new branch]            dependabot/bundler/Library/Homebrew/rubocop-1.65.1 -> origin/dependabot/bundler/Library/Homebrew/rubocop-1.65.1* [new branch]            depends-on-order-cop-blank-lines                   -> origin/depends-on-order-cop-blank-lines* [new branch]            deprecate-old-style-cmds                           -> origin/deprecate-old-style-cmds* [new branch]            info-analytics-timeout                             -> origin/info-analytics-timeout* [new branch]            load-installed-casks                               -> origin/load-installed-casks* [new branch]            load-internal-cask-json-v3                         -> origin/load-internal-cask-json-v3* [new branch]            make-brew-typecheck-work-with-taps                 -> origin/make-brew-typecheck-work-with-taps* [new branch]            master                                             -> origin/master* [new branch]            tmpdir-sandbox                                     -> origin/tmpdir-sandbox* [new branch]            use-cask-tab-to-better-identify-installed-casks    -> origin/use-cask-tab-to-better-identify-installed-casks* [new tag]               0.1                                                -> 0.1* [new tag]               0.2                                                -> 0.2* [new tag]               0.3                                                -> 0.3* [new tag]               0.4                                                -> 0.4* [new tag]               0.5                                                -> 0.5* [new tag]               0.6                                                -> 0.6* [new tag]               0.7                                                -> 0.7* [new tag]               0.7.1                                              -> 0.7.1......* [new tag]               4.4.11                                             -> 4.4.11* [new tag]               4.4.12                                             -> 4.4.12* [new tag]               4.4.13                                             -> 4.4.13* [new tag]               4.4.2                                              -> 4.4.2* [new tag]               4.4.3                                              -> 4.4.3* [new tag]               4.4.4                                              -> 4.4.4* [new tag]               4.4.5                                              -> 4.4.5* [new tag]               4.4.6                                              -> 4.4.6* [new tag]               4.4.7                                              -> 4.4.7* [new tag]               4.4.8                                              -> 4.4.8* [new tag]               4.4.9                                              -> 4.4.9
remote: Enumerating objects: 55, done.
remote: Counting objects: 100% (33/33), done.
remote: Total 55 (delta 33), reused 33 (delta 33), pack-reused 22
Unpacking objects: 100% (55/55), 9.08 KiB | 216.00 KiB/s, done.
From https://mirrors.ustc.edu.cn/brew* [new tag]               4.0.29     -> 4.0.29* [new tag]               4.1.9      -> 4.1.9* [new tag]               4.2.14     -> 4.2.14* [new tag]               4.3.10     -> 4.3.10
HEAD is now at e330f371f8 Merge pull request #19002 from Homebrew/dependabot/bundler/Library/Homebrew/regexp_parser-2.10.0
==> Tapping homebrew/services
remote: Enumerating objects: 3796, done.
remote: Total 3796 (delta 0), reused 0 (delta 0), pack-reused 3796
Receiving objects: 100% (3796/3796), 1.11 MiB | 1.49 MiB/s, done.
Resolving deltas: 100% (1858/1858), done.
From https://mirrors.ustc.edu.cn/homebrew-services* [new branch]      master     -> origin/master
HEAD is now at 6df0008 Merge pull request #854 from Homebrew/dependabot/bundler/bigdecimal-3.1.9
HOMEBREW_BREW_GIT_REMOTE set: using https://mirrors.ustc.edu.cn/brew.git as the Homebrew/brew Git remote.
==> Updating Homebrew...
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/bottles-portable-ruby/portable-ruby-3.3.6.arm64_big_sur.bottle.tar.gz
################################################################################################################################################################### 100.0%
==> Pouring portable-ruby-3.3.6.arm64_big_sur.bottle.tar.gz
==> Next steps:
自动配置环境变量
执行成功重要信息!!!重要信息!!!重要信息!!!
如果遇到 command not found brew,请执行下面脚本完成安装或者直接重新打开终端:
eval "$(/opt/homebrew/bin/brew shellenv)"==> 🎉 恭喜,安装成功!
- 验证命令: brew help
- 请收藏,谨防失联: https://brew.idayer.com==> 如果有幸帮助到你,可以考虑请我喝杯咖啡~☕ 喝咖啡:https://brew.idayer.com/reward/

如上所示,提示安装成功。

配置环境变量

依次执行如下命令:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"

Homebrew 环境变量会被配置到文件 .zprofile 中:

请添加图片描述
检查 Homebrew 是否安装成功:

执行命令:

larryla@larryladeMacBook-Air ~ % brew help
Example usage:brew search TEXT|/REGEX/brew info [FORMULA|CASK...]brew install FORMULA|CASK...brew updatebrew upgrade [FORMULA|CASK...]brew uninstall FORMULA|CASK...brew list [FORMULA|CASK...]Troubleshooting:brew configbrew doctorbrew install --verbose --debug FORMULA|CASKContributing:brew create URL [--no-fetch]brew edit [FORMULA|CASK...]Further help:brew commandsbrew help [COMMAND]man brewhttps://docs.brew.sh

如上所示,显示帮助信息,说明 Homebrew 安装成功。

2、安装 Git

我原本是想使用 Homebrew 安装 Git 的,结果在安装 Homebrew 的过程中,弹出来一个对话框,提示我安装“Command Line Developer Tools”。

Command Line Developer Tools 是 macOS 提供的一组工具,用于命令行开发,包含了编译器(clang)、版本控制工具(git)、构建工具(make)和调试工具等。它们是开发者进行软件开发的基础工具,可以独立于完整的 Xcode 安装,只需占用较少的存储空间。

看到有 Git,我就直接同意安装了:

请添加图片描述
安装完成后,检查 Git 是否成功安装:

larryla@larryladeMacBook-Air ~ % git -v
git version 2.39.5 (Apple Git-154)

安装成功。

查看 git 位置:

larryla@larryladeMacBook-Air ~ % which git
/usr/bin/git

/usr/bin/:这是一个常见的系统目录,存放系统级的可执行文件(即命令和程序)。这个目录包含了 macOS 系统和很多系统级工具的可执行文件,比如 gitlscurl 等。

使用Homebrew安装Git

为什么还要使用 Homebrew 安装一遍 Git,后文有解释。

安装

执行命令:brew install git

完整过程如下:

larryla@larryladeMacBook-Air ~ % brew install git
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/api/formula.jws.jso
######################################################################### 100.0%
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/api/cask.jws.json
######################################################################### 100.0%
==> Fetching dependencies for git: libunistring, gettext and pcre2
==> Fetching libunistring
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/libunistrin
######################################################################### 100.0%
==> Fetching gettext
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/gettext-0.2
######################################################################### 100.0%
==> Fetching pcre2
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/pcre2-10.44
######################################################################### 100.0%
==> Fetching git
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/git-2.47.1.
######################################################################### 100.0%
==> Installing dependencies for git: libunistring, gettext and pcre2
==> Installing git dependency: libunistring
==> Pouring libunistring-1.3.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/libunistring/1.3: 59 files, 5.4MB
==> Installing git dependency: gettext
==> Pouring gettext-0.23.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/gettext/0.23: 2,052 files, 22.4MB
==> Installing git dependency: pcre2
==> Pouring pcre2-10.44.arm64_sequoia.bottle.tar.gz
🍺  /opt/homebrew/Cellar/pcre2/10.44: 237 files, 6.3MB
==> Installing git
==> Pouring git-2.47.1.arm64_sequoia.bottle.tar.gz
==> Caveats
The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula.
Subversion interoperability (git-svn) is now in the `git-svn` formula.zsh completions and functions have been installed to:/opt/homebrew/share/zsh/site-functions
==> Summary
🍺  /opt/homebrew/Cellar/git/2.47.1: 1,685 files, 54.4MB
==> Running `brew cleanup git`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Caveats
==> git
The Tcl/Tk GUIs (e.g. gitk, git-gui) are now in the `git-gui` formula.
Subversion interoperability (git-svn) is now in the `git-svn` formula.zsh completions and functions have been installed to:/opt/homebrew/share/zsh/site-functions

如下图所示,安装成功,版本是 2.47.1,安装在了 /opt/homebrew/Cellar/git/2.47.1 目录下:

请添加图片描述

配置环境变量

查看 Git 版本,发现依旧是之前在安装 Command Line Developer Tools 时安装的版本:

larryla@larryladeMacBook-Air ~ % git -v
git version 2.39.5 (Apple Git-154)

这是因为没有为 Homebrew 安装版本 2.47.1 配置环境变量。

笔者的 MacBook Air 用的是 zsh shell,所以需要配置 .zshrc 文件,文件中包括了之前已经配置的 Maven 和 JDK:

# JDK 和 Maven 配置
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home
M2_HOME=/Users/larryla/softwares/developer/apache-maven-3.9.9
PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar# Git 配置
GIT_HOME=/opt/homebrew/Cellar/git/2.47.1
PATH=$GIT_HOME/bin:$PATH# 导出环境变量
export JAVA_HOME
export PATH
export CLASSPATH
export M2_HOME
export GIT_HOME

再次检查 Git 版本,这次就是使用 Homebrew 安装的 Git 了:

larryla@larryladeMacBook-Air ~ % git -v        
git version 2.47.1

查看 Git 位置:

larryla@larryladeMacBook-Air ~ % which git
/opt/homebrew/Cellar/git/2.47.1/bin/git

Homebrew 安装 Git 的路径:

  • 苹果 M 系列芯片:/opt/homebrew/Cellar/git/版本号
  • Intel 芯片:/usr/local/bin/git

3、为MacBook配置GitHub的SSH

1、验证笔记本是否已有 ssh keys:

larryla@larryladeMacBook-Air ~ % ls -al ~/.ssh
ls: /Users/larryla/.ssh: No such file or directory

可以看到,本机器还没有。

2、生成 ssh keys:

在 Terminal 执行如下命令:

ssh-keygen -t rsa -b 4096 -C "1649063532@qq.com"

引号内为 GitHub 账号关联的邮箱,可以在 GitHub 上的 Settings -> Emails 处查看:

请添加图片描述
生成过程如下,中间会提示你设置密码,为了便利,不用设置密码,一路回车:

larryla@larryladeMacBook-Air ~ % ssh-keygen -t rsa -b 4096 -C "1649063532@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/larryla/.ssh/id_rsa): 
Created directory '/Users/larryla/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/larryla/.ssh/id_rsa
Your public key has been saved in /Users/larryla/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:h4hMW90V9Nv5..........7kG75JQKpmJ0 16......2@qq.com
The key's randomart image is:
+---[RSA 4096]----+
|           .+.o=*|
|       . . .oo=+=|
|    . . . .o =o=*|
|   o + . .o = *=+|
|    + .+So.o *.+o|
|      o E.  * o.o|
|           . + o.|
|              .  |
|                 |
+----[SHA256]-----+

3、将 SSH Key 添加到 ssh-agent:eval $(ssh-agent -s)

larryla@larryladeMacBook-Air ~ % eval $(ssh-agent -s)
Agent pid 93133
larryla@larryladeMacBook-Air ~ % ssh-add ~/.ssh/id_rsa
Identity added: /Users/larryla/.ssh/id_rsa (1649063532@qq.com)

4、打开i d_rsa.pub 文件,复制文件内容到 GitHub

ls -al ~/.sshcat ~/.ssh/id_rsa.pub

将从"ssh-rsa"开头一直到邮箱结束的字符串都复制上。

打开 GitHub,找到 SSH and GPG keys:

请添加图片描述
选择 New SSH key:

  • 取名
  • 粘贴
    请添加图片描述

5、验证SSH连接是否建立成功。输出过程中,可能会要求输入 yes 或 no,输入 yes 后回车即可:

larryla@larryladeMacBook-Air ~ % ssh -T git@github.com
The authenticity of host 'github.com (20.2xx.xxx.xx6)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvv...........zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi Acura-bit! You've successfully authenticated, but GitHub does not provide shell access.

4、IntelliJ IDEA配置全局Git

背景:每次新建项目或打开项目,都会使用默认的配置 .m2 的那个,能不能一次性配置好?答案是可以的。

如下图所示,关闭所有项目 File -> Close Project 后,进入下面的界面,找到左下角的设置按钮。

请添加图片描述
设置 Maven 的安装路径、settings.xml 文件路径、本地仓库路径:

请添加图片描述
接下来,把跟 Maven 相关的也设置好:

请添加图片描述

请添加图片描述
现在配置 Git。找到 Version Control -> Git 如下图所示,配置好 Homebrew 安装的 Git 路径,Test 一下成功。注意不要勾选框。

请添加图片描述

附:

一、在安装 Command Line Developer Tools 时已经安装了 Git,为啥还要用 Homebrew 安装 Git 呢?

在 macOS 上,安装 Command Line Developer Tools 时确实会自带 Git(以及其他开发工具,如 clangmake 等)。但是,有时你可能会希望使用 Homebrew 来重新安装或升级 Git,原因主要有以下几点:

1、版本更新

  • macOS 系统自带的 Git 版本可能不是最新的。虽然 Command Line Developer Tools 中的 Git 版本会随着 Xcode 或命令行工具的更新而更新,但它可能没有最新的功能或修复。
  • 使用 Homebrew 安装 Git 可以更方便地安装最新版本的 Git,并且可以通过 brew upgrade 命令轻松更新到最新版本

2、不同的版本管理需求

  • 使用 Homebrew 安装 Git 允许我们拥有一个与系统自带的 Git 版本隔离的版本。例如,你可能需要某个特定版本的 Git(例如 2.x 或更高版本),而 macOS 自带的 Git 可能较旧或不符合你的需求。
  • Homebrew 安装的 Git 不会干扰系统自带的 Git,可以通过路径优先级来控制使用哪个版本。

3、独立管理

  • Homebrew 安装的 Git 可以完全由 Homebrew 来管理,这意味着可以通过 Homebrew 安装、升级、卸载 Git,所有操作都非常方便。我们不必依赖系统更新来获取 Git 的最新版本。
  • 如果使用的是系统自带的 Git/usr/bin/git),它通常是由 macOS 管理的,更新时不一定能够随时满足你的需求。而通过 Homebrew 安装 Git,你可以完全控制版本。

4、

  • 在某些情况下,使用系统自带的 Git 可能会导致与其他工具或库的冲突。例如,有时其他开发工具(如某些 IDE 或脚本)可能依赖于 Homebrew 安装的 Git 版本。如果你通过 Homebrew 安装 Git,它的路径通常在 /opt/homebrew/bin/git(Apple Silicon)或 /usr/local/bin/git(Intel Mac)中,这些路径在 Homebrew 管理下,与系统路径区分开来,减少了冲突的可能性。

5、Homebrew 允许你通过简单的命令(如 brew install git 和 brew upgrade git)来管理 Git 的版本,避免手动下载和安装。如果系统自带的 Git 版本出现问题,使用 Homebrew 安装的 Git 可以更容易进行修复或替代。

简单来说就是,Homebrew 可以方便的管理 Git,如升级、卸载等。

二、环境变量命令

(1) echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile

这个命令的作用是将 Homebrew 的环境变量配置添加到你的 ~/.zprofile 文件中。

  • /opt/homebrew/bin/brew:这是 Homebrew 在 Apple Silicon Mac(M1 或 M2 芯片)上的默认安装路径。对于 Intel 架构的 Mac,路径通常是 /usr/local/bin/brew
  • brew shellenv:这个命令会打印出需要设置的环境变量,例如 PATHHOMEBREW_PREFIX 等,以确保 Homebrew 正常工作。
  • eval "$(/opt/homebrew/bin/brew shellenv)":这条命令执行了 brew shellenv 输出的命令,将它们加载到当前 shell 环境中。
  • >> ~/.zprofile 将这些设置追加到你的 ~/.zprofile 文件中,确保在每次启动 shell 时,这些环境变量都能够自动加载。~/.zprofile 文件通常会在使用 zsh 作为 shell 时加载。

(2) eval "$(/opt/homebrew/bin/brew shellenv)"

这条命令会立即在当前的 shell 会话中执行 brew shellenv 输出的命令,从而设置 Homebrew 所需的环境变量。这是一个临时的设置,它只会影响当前终端会话,直到你关闭终端窗口。

这两条命令的作用是什么?

  • 持久化设置:第一条命令将 Homebrew 的环境变量设置添加到 ~/.zprofile 中,这样每次启动新终端时,Homebrew 的环境变量会自动加载。
  • 即时生效:第二条命令立即在当前 shell 会话中设置环境变量,确保你可以立刻使用 Homebrew。

三、.zprofile 和 .zshrc 有啥区别?为啥把 JDK、Maven、Git 的环境变量配置在 .zshrc 文件中,而把 Homebrew 环境变量配置在 .zprofile 文件中?

.zprofile.zshrc 都是 Zsh 配置文件,用于设置 shell 环境中的变量和行为。它们之间有一些细微的区别,主要体现在它们的加载时机作用上。

  • .zprofile
    • 作用:这个文件主要用于设置登录 shell(login shell)的环境变量和配置。
    • 加载时机:只会在登录 shell 启动时加载。
    • 用途:通常用来配置系统范围的环境变量,像是 PATHHOMEBREW_PREFIXMAVEN_HOME 等,它们通常只需要在登录时设置一次
  • .zshrc
    • 作用:这个文件用于设置交互式非登录 shell 的配置。它通常用于设置命令别名、自动补全、提示符、shell 功能等,它是每次启动一个新的 shell 实例时都需要加载的
    • 加载时机:每次打开一个新的终端窗口(即使是子 shell)时都会加载,不管是登录 shell 还是非登录 shell,.zshrc 都会被加载。
    • 用途:通常用来配置与 shell 环境互动相关的内容,如别名、函数、命令补全等,方便每次打开终端时都能自动生效。

为什么把 Maven 配置在 .zshrc 中,而把 Homebrew 配置在 .zprofile 中?

  • Maven 配置在 .zshrc 中:
    • 原因:Maven 的配置通常包括设置环境变量(如 MAVEN_HOME 和将 mvn 命令路径添加到 PATH 中)。这些配置主要影响 shell 会话(例如执行 Maven 命令时)。
    • .zshrc 是每次打开新 shell 时都会加载的,因此将 Maven 配置在 .zshrc 中,意味着每次启动一个新的终端窗口时,都会设置好 Maven 的相关环境变量,确保你能够在新的 shell 会话中直接使用 mvn 命令。
  • Homebrew 配置在 .zprofile 中:
    • 原因:Homebrew 主要影响的是登录 shell,例如你在终端登录时,或者通过 SSH 登录时,Homebrew 需要确保你能够正常使用 brew 命令。配置 Homebrew 的环境变量(如 PATH)通常只需要在登录时执行一次。
    • .zprofile 只在登录时加载一次,因此将 Homebrew 的环境变量(例如通过 brew shellenv 配置的内容)放入 .zprofile 中,只会在登录时一次性配置好,避免在每次打开终端时都重复设置

简单来说就是,Homebrew 只需要在登陆时设置一次,而 Maven、Git 等需要在每个新打开的窗口都设置一次。

四、登录 shell vs 非登录 shell vs 交互式 shell?

  1. 登录 shell(Login Shell):
    1. 这是你首次打开终端时启动的 shell,或者通过 SSH 登录时启动的 shell。登录 shell 会加载 .zprofile(或在 Bash 中是 .bash_profile)等文件。
    2. 这个 shell 会在你登录时初始化环境,并且加载登录 shell 特有的配置。
  2. 交互式 shell(Interactive Shell):
    1. 交互式 shell 是指可以与用户交互、等待用户输入命令的 shell(比如你执行 lspwd 等命令的环境)。
    2. 交互式 shell 会加载 .zshrc(或在 Bash 中是 .bashrc)文件,通常用于配置命令别名、补全等交互式功能。
  3. 非登录 shell(Non-login Shell):
    1. 非登录 shell 是在你已经有一个登录 shell 会话的情况下,通过运行某些命令(如 zshbash)启动的新的 shell 会话。
    2. 非登录 shell 会加载 .zshrc(或 .bashrc),但不会加载 .zprofile.bash_profile

终端启动时的 shell 既是登录 shell 也是交互式 shell:当你打开一个新的终端窗口时,这个 shell 是一个登录 shell(因为它是用户登录后启动的)并且是交互式 shell(因为它等待用户输入命令)。因此,它会加载 .zprofile.zshrc 两个文件。

参考:

  • MacBook 安装 Homebrew:https://zhuanlan.zhihu.com/p/90508170
  • MacBook 安装 Homebrew:https://blog.csdn.net/weixin_45277161/article/details/134719230?spm=1001.2014.3001.5501
  • MacBook 配置 GitHub SSH:https://www.cnblogs.com/sinceForever/p/17954613
  • MacBook 配置 GitHub SSH:https://juejin.cn/post/6993506356279902244
  • https://blog.csdn.net/weixin_45277161/article/details/134709441

相关文章:

【玩转MacBook】Git安装

Git 官网也提到了MacBook 可以使用 Homebrew 安装 Git,所以在此使用 Homebrew 安装。 1、安装 Homebrew 执行安装脚本 在 Terminal 中执行如下命令: /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.…...

【IC验证】verilog及systemverilog特殊特性的分析

verilog及systemverilog特殊特性的分析 1.概述2.赋值延迟(0)总结(1)情况一:initial中进行阻塞赋值和非阻塞赋值(不延迟)a代码b 电路图c 结果 (2)时钟a 代码b 电路图c 结果…...

Apollo中间件技术:从入门到精通

一、引言 在Java开发的微服务架构中,配置管理是一个不可或缺的重要环节。随着服务数量的增加和部署环境的复杂化,传统的手动配置管理方式已难以满足需求。Apollo作为一款开源的分布式配置中心,凭借其强大的功能和灵活的架构,成为…...

汽车行业的MES系统方案(附案例资料合集)

针对汽车行业的MES系统方案,以下是一些关键点和实施案例: 核心功能: 实时监控:MES系统通过传感器和物联网技术实时监控生产线上的每一个环节,确保信息的及时传递。数据分析:系统对收集的数据进行深度分析&a…...

Python入门:7.Pythond的内置容器

引言 Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器&…...

单片机与MQTT协议

MQTT 协议简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布 / 订阅(publish/subscribe)模式的 “轻量级” 通讯协议,该协议构建于 TCP/IP 协议上&#xf…...

记录命令行操作树莓派Wifi的方式

打开WiFi rfkill unblock wlan 关闭WiFi rfkill block wlan 设置可连接的WiFi 方法一(bullseye及以前版本才可用,bookworm版本) sudo nano /etc/wpa_supplicant/wpa_supplicant.conf network{ssid"wifi_name"psk"wifi_pas…...

Docker 安装mysql ,redis,nacos

一、Mysql 一、Docker安装Mysql 1、启动Docker 启动:sudo systemctl start dockerservice docker start 停止:systemctl stop docker 重启:systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 3.1.默认拉取最新版…...

[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)

文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步:计算 (a*c) (-b*d)i2.1.4 第2步:计算 (a*d) (b*c)i2.1.5 第3步:计算结果合并 2.2 算法实现(UseVectors)2.…...

curl 放弃对 Hyper Rust HTTP 后端的支持

curl 放弃了对使用 Rust 编写 Hyper HTTP 后端的支持,因为用户和开发者对此功能的需求很少。 curl 创始人兼核心开发者 Daniel Stenberg 表示,尽管这项工作最初由 ISRG 赞助并且看起来很有希望,但 Hyper 支持多年来一直处于实验阶段&#xf…...

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中,选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片,凭借其卓越的能效比、多功能扩展性和优秀的实时性能,已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…...

RBAC权限控制

1、Spring Security 是一个功能强大的Java安全框架,它提供了全面的安全认证和授权的支持。 2 SpringSecurity配置类(源码逐行解析) Spring Security的配置类是实现安全控制的核心部分 开启Spring Security各种功能,以确保Web应…...

Linux高并发服务器开发 第六天(rwx 对于目录和文件的区别 gcc编译器 动态库静态库)

目录 1.rwx 对于目录和文件的区别 2.gcc 编译器 2.1编译过程 2.2gcc 的其他参数 3.动态库和静态库 3.1函数库 1.rwx 对于目录和文件的区别 r 文件的内容可以被查看。支持cat、more、head...vim ;目录的内容可以被查看。ls、tree …...

如何使用远程控制工具管理你的计算机系统

在现代工作环境中,远程控制技术越来越重要,尤其是对于系统管理员、技术支持人员以及需要远程工作的人来说。远程控制不仅仅是便捷,更是提高工作效率、快速解决问题的重要手段。今天,我们将讨论一些常见的远程控制工具,…...

在K8S中,CNI有什么作用?

在kubernetes中,Container Network Interface(CNI)起着至关重要的作用,主要解决了容器网络配置及通信的问题,确保了Pod间网络连通性及其外部世界的通信。CNI的具体作用包括但不限于以下几个方面。 1. 网络配置自动化: 当kuberne…...

C语言性能优化:从基础到高级的全面指南

引言 C 语言以其高效、灵活和功能强大而著称,被广泛应用于系统编程、嵌入式开发、游戏开发等领域。然而,要写出高性能的 C 语言代码,需要对 C 语言的特性和底层硬件有深入的了解。本文将详细介绍 C 语言性能优化的背后技术,并通过…...

JS中Symbol (符号)数据类型详解和应用场景

JavaScript中Symbol数据类型详解 Symbol是ES6引入的一种原始数据类型,表示唯一的标识符。它是通过Symbol()函数生成的,每次调用都会返回一个独一无二的值。Symbol值的主要用途是为对象的属性提供唯一标识,以避免属性名冲突。 特点 唯一性 每…...

Go gin框架(详细版)

目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go?改动的地方 index.html?改动的地方 style.css?改…...

Linux系统 —— 进程控制系列 - 进程的等待:wait 与 waitpid

目录 1. 进程的等待 1.1 为什么需要等待 2. 进程等待的方法 1. wait 2. waitpid 3. 获取子进程status 4. 阻塞与非阻塞等待 续接前文: Linux系统 —— 进程控制系列 - 进程的创建与终止 :fork与exit-CSDN博客https://blog.csdn.net/hedhjd/artic…...

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述:在blender中合并的模型导出为glb,在threejs中导入仍显示多个mesh,并不是统一的整体,导致需要整体高亮或者使用DragControls等不能统一控制。 原因:模型有多个材质,在blender中合并的时候,…...

探索多模态大语言模型(MLLMs)的推理能力

探索多模态大语言模型(MLLMs)的推理能力 Multimodal Large Language Models (MLLMs) flyfish 原文:Exploring the Reasoning Abilities of Multimodal Large Language Models (MLLMs): A Comprehensive Survey on Emerging Trends in Mult…...

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

wireshark 下载链接:https://pan.quark.cn/s/eab7f1e963be 提取码:rRAg 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wireshark…...

单片机实物成品-007 汽车防盗系统(代码+硬件+论文)

汽车尾气监测系统(温度震动传感器 红外热释电GPS三个指示灯蜂鸣器正常模式防盗模式wifi传输控制送APP源码 ) 把该系统划分为两个不同设计主体,一方面为硬件控制主体,通过C语言来编码实现,以STM32开发板为核心控制器&a…...

redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…...

windows系统下使用cd命令切换到D盘的方法

windows系统下使用cd命令切换到D盘的方法 系统环境配置 win10系统原装C盘后期自己安装的硬盘D盘 python3.8安装在D盘中 问题说明 winR打开终端,使用 cd d:命令,无法将当前目录切换到D盘 解决方法 方法一:使用下面这条命令 cd /d d:运…...

word参考文献第二行缩进对齐

刚添加完参考文献的格式是这样: ”段落“—>缩进修改、取消孤行控制 就可以变成...

Springboot关于格式化记录

日期格式化 返回前端日期需要格式化 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</version> </dependency>JsonFormat(pattern "yyyy-MM-dd…...

1.business english--build rapport

build rapport with someone 建立融洽关系 Salespeople often try to build rapport with customers to boost sales. user a variety of appropriate questions. answer the question according to your experience. Do you know how to make a good connection with others…...

发明专利与实用新型专利申请过程及自助与代办方式对比

申请专利&#xff08;发明专利、实用新型专利、外观设计专利&#xff09;有两种方式&#xff1a;1、自己直接向国家知识产权局申请。2、通过专利代办处申请。以下是对这两种专利类型&#xff08;发明专利、实用新型专利&#xff09;申请过程及两种申请方式的详细介绍和对比,参考…...

设计模式-创建型-工厂方法模式

什么是工厂方法模式&#xff1f; 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是 创建型设计模式之一&#xff0c;目的是通过定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪个类。简而言之&#xff0c;工厂方法模式通过延迟对象的创建过程到子类来…...

如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?

目录 1.创新性与学术贡献的超级加分✔ 2.科研过程中的各个环节—从0到1✔ 3.创新性与理论深度的完美结合✔ 4.论证与写作的清晰性✔ 5.数据整理和文献回顾——效率与精准并存✔ 6.创新性要求辅助✔ 总结 宝子们&#xff0c;学术论文写作的旅程是不是感觉像是走进了迷雾森…...

Linux驱动开发--字符设备驱动开发

一、概述 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI, LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。 Linux 应用程序对驱动程…...

Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue 在学习完简单的网络编程后&#xff0c;我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时&#xff0c;我们通过一个线程处理连接的申请&#xff0c;随后通过多线程或者线程…...

828华为云征文|使用sysbench对Flexus X实例对mysql进行性能测评

目录 一、Flexus X实例概述 1.1?Flexus X实例 1.2?在mysql方面的优势 二、在服务器上安装MySQL 2.1 在宝塔上安装docker 2.2 使用宝塔安装mysql 2.3 准备测试数据库和数据库表 三、安装sysbench并进行性能测试 3.1 使用yum命令sysbench 3.2?运行?sysbench 并进行…...

数据结构:堆

目录 1.堆的概念 2.堆的结构 3.堆的初始化 4.堆的销毁 5.堆的插入 6.堆的删除 7.判断堆是否为空 1.堆的概念 堆的性质&#xff1a; 堆中某个结点的值总是不大于或不小于其父结点的值&#xff1b; 堆总是一棵完全二叉树。 以下堆的结构默认大堆 &#xff1a; 2.堆的结…...

洪水灾害多智能体分布式模拟示例代码

1. 环境定义&#xff1a;支持灾害动态、地理数据和分布式架构 import numpy as np import random import matplotlib.pyplot as plt# 新疆主要城市及邻接关系 XINJIANG_CITIES {Urumqi: [Changji, Shihezi],Changji: [Urumqi, Shihezi, Turpan],Shihezi: [Urumqi, Changji, K…...

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具&#xff0c;可用于构建知识库&#xff0c;实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库&#xff0c;包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…...

Selenium实践总结

1.使用显示等待而不是隐式等待 隐式等待可能会导致不可预测的测试行为&#xff0c;尤其是在动态 Web 应用程序中。显式等待&#xff0c;它允许您 等待特定条件发生后再继续测试&#xff0c;这种方法提供了更多的控制和可靠性。 WebDriverWait wait new WebDriverWait(drive…...

华为麦芒5(安卓6)termux记录 使用ddns-go,alist

下载0.119bate1 安卓5和6版本,不能换源,其他源似乎都用不了,如果root可以直接用面具模块 https://github.com/termux/termux-app/releases/download/v0.119.0-beta.1/termux-app_v0.119.0-beta.1apt-android-5-github-debug_arm64-v8a.apk 安装ssh(非必要) pkg install open…...

Springboot jar包加密加固并进行机器绑定

获取机器码&#xff0c;通过classfinal-fatjar-1.2.1.jar来获取机器码 命令&#xff1a;java -jar classfinal-fatjar-1.2.1.jar -C 对springboot打包的jar进行加密功能 java -jar classfinal-fatjar-1.2.1.jar -file lakers-ljxny-3.0.0.jar -packages com.lygmanager.laker…...

【Microi吾码】开源力量赋能低代码创新,重塑软件开发生态格局

我的个人主页 文章专栏&#xff1a;Microi吾码 一、引言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;软件开发的需求呈现出爆发式增长。企业为了在激烈的市场竞争中脱颖而出&#xff0c;不断寻求创新的解决方案以加速数字化转型。传统的软件开发方式往往面临着开发周期长、技…...

系统思考—冰山模型

“卓越不是因机遇而生&#xff0c;而是智慧的选择与用心的承诺。”—— 亚里士多德 卓越&#xff0c;从来不是一次性行为&#xff0c;而是一种习惯。正如我们在日常辅导中常提醒自己&#xff1a;行为的背后&#xff0c;隐藏着选择的逻辑&#xff0c;而选择的根源&#xff0c;源…...

Java读取InfluxDB数据库的方法

本文介绍基于Java语言&#xff0c;读取InfluxDB数据库的方法&#xff0c;包括读取InfluxDB的所有数据库&#xff0c;以及指定数据库中的measurement、field、tag等。 首先&#xff0c;创建一个Java项目&#xff0c;用于撰写代码。如果大家是基于IDEA来创建项目&#xff0c;则可…...

【mybatis-plus问题集锦系列】在mybatisplus中无法autowired的原因排查及解决

mybatisplus简化了我们做数据操作&#xff0c;大大提升了我们的开发速度&#xff0c;但是今天在做测试的时候&#xff0c;突然报了这么个错误&#xff0c;排查好久才找到解决方案&#xff0c;特此记录下 问题复现 这里的测试方法报错&#xff0c;通过不了测试 org.springf…...

python中Windows系统使用 pywin32 来复制图像到剪贴板,并使用 Selenium 模拟 Ctrl+V 操作

步骤 1&#xff1a;安装必要的库 首先&#xff0c;安装 pywin32 和 selenium&#xff1a; pip install pywin32 selenium 如果使用的是 macOS&#xff0c;可以安装 pyobjc&#xff1a; pip install pyobjc 步骤 2&#xff1a;使用 pywin32 复制图像到剪贴板 在 Windows 系统中…...

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档&#xff1a; chooseMessageFile 微信小程序读取文件&#xff0c;请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…...

点亮核心板小灯 STM32U575

将核心板上的运行状态指示灯点亮 任务分析 灯如何点亮 如何看开发板原理图 开发板上的灯硬件组成 原理图 原理图&#xff08;Schematic Diagram&#xff09;&#xff0c;也称为电路图或电气图&#xff0c;是一种图形表示方法&#xff0c;用于展示电子系统或电路的工作原理和…...

“图书馆服务自动化”:基于SSM框架的图书借阅系统开发

3.1系统的需求分析 需求分析阶段是设计系统功能模块的总方向&#xff0c;可以这样来说&#xff0c;系统的整个的开发流程以及设计进度&#xff0c;基本上都是以需求分析为基本依据的[10]。需求分析阶段可以确定系统的基本功能设计&#xff0c;以及在最后的系统验收阶段&#xf…...

顶顶通呼叫中心中间件的三种呼叫方式(mod_cti基于FreeSWITCH)

顶顶通呼叫中心共有三种呼叫方式&#xff1a; 手拨呼叫点击呼叫自动外呼 联系我们 有意向了解呼叫中心中间件的用户&#xff0c;可以点击该链接添加工作人员&#xff1a;https://blog.csdn.net/H4_9Y/article/details/136148229 手拨呼叫 手拨呼叫属于常规的呼叫方式&…...

HCIA笔记9--NAT、ACL与链路聚合

1. ACL ACL: 访问控制列表, Access Control List。 通过定义规则来允许或拒绝流量的通过。 1.1 ACL分类 1.2 配置实例 如图所示&#xff0c;对R2的访问只允许192.168.1.0/24网段。 我们可以配置基本acl来限制 acl 2000 acl number 2000 rule 5 permit source 192.168.1.0 0…...