前期准备

  • 安装Git
  • 准备仓库

    准备仓库

    准备仓库的方式有2种,在Github上Create自己的仓库或Fork他人已有的仓库

Create仓库

  • 打开Github,点击左侧New新建仓库;
  • 输入相关信息,点击Create repository创建。

    Fork仓库

  • 打开目标仓库。如:test仓库

  • 点击右上角的Fork按钮,将项目复制到个人帐号下。

    克隆仓库

    克隆仓库的方式也有2种,分别是HTTPSSSH

HTTPS

  • 进入到本地仓库目录,右键打开Git Bash
  • 进入Github个人仓库,点击Clone or download,复制仓库地址
  • Clone个人仓库到本地

    1. $ git clone https://github.com/账号名/test.git
  • 进入仓库

    1. $ cd test
  • 将改动文件添加到缓存区

    1. $ git add . # 添加全部改动文件到缓存区
    2. $ git add <file_name> # 将指定文件添加到缓存区
    3. $ git rm --cached <file_name> # 将指定文件移除缓存区
    4. $ git status # 查看状态
    5. # Untracked files->即某个文件还没有被跟踪,还没有提交到git仓库里
    6. # Changes to be committed -> 文件等待被提交
  • 填写提交记录

    1. $ git commit -m "注释" # 将缓存区的提交至仓库,提交一次后再git status会看到nothing to commit
  • 提交代码

    1. $ git push # 提交代码,按提示输出github账号密码
  • 若第一次提交时出现错误提示,则需配置全局账号密码及邮箱地址,然后重新提交。

    1. $ git config --global user.name '账号'
    2. $ git config --global user.password '密码'
    3. $ git config --global user.email '邮箱地址'
  • 此时,在Github上的个人仓库刷新即可新提交的文件。

  • 注:使用HTTPS方式时,每次提交都需要输入账号密码,但通过修改配置文件可直接提交。打开仓库目录下.git/config,修改url。注意.git目录为隐藏目录,需设置显示隐藏的目录。

    1. # url = https://github.com/账号/test.git
    2. url = https://账号:密码@github.com/fengkkk/test.git

    SSH

  • 进入到本地仓库目录,右键打开Git Bash

  • 进入Github个人仓库,点击Clone or download,复制仓库地址
  • Clone个人仓库到本地

    1. $ git clone git@github.com:账号名/test.git
  • 进入仓库

    1. $ cd test
  • 生成SSH Key

    1. $ ssh-keygen -t rsa
    2. # Generating public/private rsa key pair.
    3. # Enter file in which to save the key (/c/Users/Feng/.ssh/id_rsa):
    4. # 直接回车,括号内为你的SSH Key密钥文件存放路径
    5. # 备注:
    6. # 指定rsa算法生成密钥,生成两个文件:公钥id_rsa.pub和密钥id_rsa
    7. # Linux/Mac 系统 ~/.ssh
    8. # 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后即可按照正常流程提交代码,无需输入密码。

    1. $ ssh -T git@github.com
    2. # Hi fengkkk! You've successfully authenticated, but GitHub does not provide shell access.
  • 将改动文件添加到缓存区

    1. $ git add . # 添加全部改动文件到缓存区
    2. $ git add <file_name> # 将指定文件添加到缓存区
    3. $ git rm --cached <file_name> # 将指定文件移除缓存区
    4. $ git status # 查看状态
    5. # Untracked files->即某个文件还没有被跟踪,还没有提交到git仓库里
    6. # Changes to be committed -> 文件等待被提交
  • 填写提交记录

    1. $ git commit -m "注释" # 将缓存区的提交至仓库,提交一次后再git status会看到nothing to commit
  • 提交代码

    1. $ git push # 提交代码,按提示输出github账号密码

    推送现有项目到远程新仓库

  • 进入项目文件夹,初始化Git的本地仓库

    1. $ git init
    2. # Initialized empty Git repository in E:/xxx/.git/
  • 正常添加

    1. $ git add .
    2. $ git commit -m "first"
    3. # 可能会出现以下错误: warning: LF will be replaced by CRLF
    4. $ git config --global core.autocrlf false
  • 配置远程仓库

    1. # git remote add origin <服务器的账号>@<服务器 ip>:git服务器目录
    2. $ git remote add origin https://github.com/<your_name>/<repositories>.git
    3. $ git push --set-upstream origin master

    Git常用指令

    1. $ git init # git初始化
    2. $ git status # 查看状态
    3. # Untracked files->即某个文件还没有被跟踪,还没有提交到git仓库里
    4. # Changes to be committed -> 文件等待被提交
    5. $ git add # 添加到缓存区
    6. $ git rm --cached # 移除缓存
    7. $ git commit -m "注释" # 将缓存区的提交至仓库,提交一次后再git status会看到nothing to commit
    8. $ git log # 查看所有产生的commit记录
    9. $ git add & git commit # 直接提交
    10. $ git branch # 提交到分支
    11. $ git checkout test2 # 切换到分支test2
    12. $ git checkout -b test2 # 新建一个test2分支,并且自动切换该分支
    13. $ git merge test2 # 将test2分支合并进当前分支
    14. # 有些时候可能会删除失败,比如test2分支的代码还没有合并到master,-d是删除不了的。
    15. # 但如果非要删除,那就执行-D强制删除
    16. $ git branch -d test2 # 删除分支test2
    17. $ git branch -D test2 # 强制删除分支test2
    18. $ git tag v1.0 #在当前代码状态下新建了一个标签v1.0
    19. $ git pull origin master # 把远程最新的代码更新到本地
    20. $ git push origin master # 把本地代码推到远程master分支
    21. # 一般先pull再push,这样不容易冲突。

    进阶

    贡献代码

  1. Fork项目到自己仓库;
  2. git clone自己仓库中刚Fork的项目
  3. 本地修改,然后将本地项目提交到自己的仓库

    1. $ git add -A # 添加全部
    2. $ git commit -m '更新日志'
    3. $ git push # 提交到服务器
  4. 然后在仓库Pull request中可以看到自己的提交;

  5. 最后点击Create pull request,填写注释后提交,等待作者确认即可。

    子模块

    某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个

  • 添加子模块:git submodule add <URL> <path>。运行后生成一个.gitmodules文件

    1. $ 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

  1. git add . 的时候遇到warning: LF will be replaced by CRLF in .....

    1. # warning: LF will be replaced by CRLF in ......
    2. # The file will have its original line endings in your working directory.
    3. # 原因: 路径中存在 / 的符号转义问题,false就是不转换符号默认是true,相当于把路径的 / 符号进行转义,这样添加的时候就有问题
    4. $ git config --global core.autocrlf false
  2. 修改全局配置

    1. $ git config --global user.name 'name'
    2. $ git config --global user.password 'password'
    3. $ git config --list

    其它

    廖雪峰Git教程
    猴子都能懂的Git入门
    SourceTree企业版