目的
用macbook在本地新建一些文件和文件夹后,想上传到github。于是在实现这个功能过程中遇到了一些问题,并一一进行解决。借此进行记录,以备后用。
git基础
git安装
- 进入git官网根据电脑系统选择对应版本进行下载并安装即可。
- 查看git版本,验证是否安装成功
$ git --version
// git version 2.39.2 (Apple Git-143)
git最小配置
- 查看当前用户git配置信息
$ git config --list --global
// user.email=666@163.com
// user.name=666
// http.sslbackend=openssl
- 如果没出现name和email,说明没配置过,可执行下面命令进行配置(注意是--global)
git config --global user.name "666"
git config --global user.email "666@163.com"
- 如果针对当前项目,想用其他账号进行绑定,则需配置当前项目git配置信息(注意是--local)
git config --local user.name "888"
git config --local user.email "888@163.com"
git与github同步
注册github
- 准备好一个邮箱账号,然后进入github官网进行注册即可。
配置公私钥
- 检查是否已存在SSH keys(window用户可直接使用Git Bash工具执行以下命令)
$ ls -al ~/.ssh
// 如果存在下面三个文件之一则说明存在SSH key(id_rsa.pub / id_ecdsa.pub / id_ed25519.pub)
- 不存在则通过如下命令生成一个SSH key
ssh-keygen -t ed25519 -C "your_email@example.com"
- 与GitHub的SSH连接的设置,具体步骤:
- 新建或打开
~/.ssh/config
touch ~/.ssh/config- 将如下内容添加到config文件中
Host github.com # 表示这些配置是用于GitHub的连接 AddKeysToAgent yes # 指示SSH客户端在连接时,将私钥添加到SSH代理中。 UseKeychain yes # 指示SSH客户端使用macOS的钥匙串(Keychain)服务来存储和读取SSH私钥的密码。如果是window电脑,请不要加这一行! IdentityFile ~/.ssh/id_ed25519 # 指定了SSH客户端尝试连接到 `github.com` 时应使用的私钥文件的路径。 - 新建或打开
- 将私钥(SSH keys)添加到SSH代理(ssh-agent)的缓存中,当进行SSH连接时,SSH客户端会请求
ssh-agent,ssh-agent就可以自动请求系统的钥匙串,从钥匙串获取私钥密码。ssh-add --apple-use-keychain ~/.ssh/id_ed25519 // 将 `~/.ssh/id_ed25519` 指定的私钥添加到SSH代理,并且将其密码存储在macOS的钥匙串中,以便自动管理和使用。如果是window电脑,请不要加--apple-use-keychain参数!
给你的github账号新建公钥
- 复制本地公钥
clip < ~/.ssh/id_ed25519.pub
// 如果clip命令不可用,可以直接用记事本打开.pub文件后手动复制
- 打开github网站,点击头像 -> Settings -> SSH and GPG keys -> New SSH key,将公钥粘贴后保存
本地仓库同步到github
- 把已有项目初始化为git仓库
$ cd /path/to/your/folder # 替换为你的文件夹路径
$ git init // 会生成.git文件,即在该文件夹中创建一个新的git仓库。
- 添加文件到暂存区,并提交更改到本地仓库
git add .
git commit -m "Initial commit"
- 将该远程仓库添加到你的本地仓库,如果想对应到全新仓库,则需先上github官网新建仓库
git remote add origin <repository-URL>
- 推送更改到远程仓库
git push -u origin master
// 如果你的默认分支是 `main` 或其他名称,需要相应地替换它。
注意:如果远程仓库不为空,并且包含了你本地没有的文件,你可能首先需要执行 git pull origin master 来合并远程仓库的更改。如果存在同名文件并且这些文件在远程仓库和你的本地仓库中都有更改,这将导致合并冲突。在处理冲突的过程中,与你的团队成员沟通非常重要,特别是当冲突涉及到多人共同工作的代码时。