前期准备
- 安装Git
- 准备仓库
准备仓库
准备仓库的方式有2种,在Github上
Create
自己的仓库或Fork
他人已有的仓库
Create仓库
HTTPS
- 进入到本地仓库目录,右键打开
Git Bash
- 进入Github个人仓库,点击
Clone or download
,复制仓库地址 Clone个人仓库到本地
$ git clone https://github.com/账号名/test.git
进入仓库
$ cd test
将改动文件添加到缓存区
$ git add . # 添加全部改动文件到缓存区
$ git add <file_name> # 将指定文件添加到缓存区
$ git rm --cached <file_name> # 将指定文件移除缓存区
$ git status # 查看状态
# Untracked files->即某个文件还没有被跟踪,还没有提交到git仓库里
# Changes to be committed -> 文件等待被提交
填写提交记录
$ git commit -m "注释" # 将缓存区的提交至仓库,提交一次后再git status会看到nothing to commit
提交代码
$ git push # 提交代码,按提示输出github账号密码
若第一次提交时出现错误提示,则需配置全局账号密码及邮箱地址,然后重新提交。
$ git config --global user.name '账号'
$ git config --global user.password '密码'
$ git config --global user.email '邮箱地址'
此时,在Github上的个人仓库刷新即可新提交的文件。
注:使用HTTPS方式时,每次提交都需要输入账号密码,但通过修改配置文件可直接提交。打开仓库目录下
.git/config
,修改url
。注意.git
目录为隐藏目录,需设置显示隐藏的目录。# url = https://github.com/账号/test.git
url = https://账号:密码@github.com/fengkkk/test.git
SSH
进入到本地仓库目录,右键打开
Git Bash
- 进入Github个人仓库,点击
Clone or download
,复制仓库地址 Clone个人仓库到本地
$ git clone git@github.com:账号名/test.git
进入仓库
$ cd test
生成SSH Key
$ ssh-keygen -t rsa
# Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/Feng/.ssh/id_rsa):
# 直接回车,括号内为你的SSH Key密钥文件存放路径
# 备注:
# 指定rsa算法生成密钥,生成两个文件:公钥id_rsa.pub和密钥id_rsa
# Linux/Mac 系统 ~/.ssh
# win系统 C:\Users\username\.ssh
打开SSH Key存放路径(如
/c/Users/Feng/.ssh/
),并使用文本编辑器打开公钥文件id_rsa.pub
,复制全部内容。- 打开
Github>设置
页面,点击左侧SSH and GPG keys
,再点击New SSH key
。随便填写Title,然后将公钥文件内容粘贴进入Key。 SSH key添加成功后,一般会有邮件提醒,另外也可以测试一下。添加完SSH Key后即可按照正常流程提交代码,无需输入密码。
$ ssh -T git@github.com
# Hi fengkkk! You've successfully authenticated, but GitHub does not provide shell access.
将改动文件添加到缓存区
$ git add . # 添加全部改动文件到缓存区
$ git add <file_name> # 将指定文件添加到缓存区
$ git rm --cached <file_name> # 将指定文件移除缓存区
$ git status # 查看状态
# Untracked files->即某个文件还没有被跟踪,还没有提交到git仓库里
# Changes to be committed -> 文件等待被提交
填写提交记录
$ git commit -m "注释" # 将缓存区的提交至仓库,提交一次后再git status会看到nothing to commit
提交代码
$ git push # 提交代码,按提示输出github账号密码
推送现有项目到远程新仓库
进入项目文件夹,初始化Git的本地仓库
$ git init
# Initialized empty Git repository in E:/xxx/.git/
正常添加
$ git add .
$ git commit -m "first"
# 可能会出现以下错误: warning: LF will be replaced by CRLF
$ git config --global core.autocrlf false
配置远程仓库
# git remote add origin <服务器的账号>@<服务器 ip>:git服务器目录
$ git remote add origin https://github.com/<your_name>/<repositories>.git
$ git push --set-upstream origin master
Git常用指令
$ git init # git初始化
$ git status # 查看状态
# Untracked files->即某个文件还没有被跟踪,还没有提交到git仓库里
# Changes to be committed -> 文件等待被提交
$ git add # 添加到缓存区
$ git rm --cached # 移除缓存
$ git commit -m "注释" # 将缓存区的提交至仓库,提交一次后再git status会看到nothing to commit
$ git log # 查看所有产生的commit记录
$ git add & git commit # 直接提交
$ git branch # 提交到分支
$ git checkout test2 # 切换到分支test2
$ git checkout -b test2 # 新建一个test2分支,并且自动切换该分支
$ git merge test2 # 将test2分支合并进当前分支
# 有些时候可能会删除失败,比如test2分支的代码还没有合并到master,-d是删除不了的。
# 但如果非要删除,那就执行-D强制删除
$ git branch -d test2 # 删除分支test2
$ git branch -D test2 # 强制删除分支test2
$ git tag v1.0 #在当前代码状态下新建了一个标签v1.0
$ git pull origin master # 把远程最新的代码更新到本地
$ git push origin master # 把本地代码推到远程master分支
# 一般先pull再push,这样不容易冲突。
进阶
贡献代码
- 先Fork项目到自己仓库;
git clone
自己仓库中刚Fork的项目本地修改,然后将本地项目提交到自己的仓库
$ git add -A # 添加全部
$ git commit -m '更新日志'
$ git push # 提交到服务器
然后在仓库
Pull request
中可以看到自己的提交;- 最后点击
Create pull request
,填写注释后提交,等待作者确认即可。
子模块
某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个
添加子模块:
git submodule add <URL> <path>
。运行后生成一个.gitmodules
文件$ git submodule add https://github.com/hongriSec/PHP-Audit-Labs.git PHP-Audit-Labs
但是我在
Windows
下运行遇到报错please make sure that the .gitmodules file is in the working tree
。此时手动创建一个.gitmodules
文件,再重新运行命令即可,猜测是权限原因Q&A
git add .
的时候遇到warning: LF will be replaced by CRLF in .....
# warning: LF will be replaced by CRLF in ......
# The file will have its original line endings in your working directory.
# 原因: 路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题
$ git config --global core.autocrlf false
修改全局配置
$ git config --global user.name 'name'
$ git config --global user.password 'password'
$ git config --list
其它