Git,GitHub入门

Git 资料参考:
http://www.runoob.com/git/git-tutorial.html
GitHub 资料参考:
http://www.ruanyifeng.com/blog/2014/06/git_remote.html

所有操作都是基于 CentOS7,其他系统仅供参考。

1. 简介

Git 和 SVN 不一样,Git 是一个开源的、分布式的版本控制系统,没有服务器端。之所以要在服务器上安装 Git,是为了建立一个基准,并通过公网环境保证 24 小时随时可以同步。

2. 安装配置

下载地址:
https://git-scm.com/downloads
https://github.com/git/git/releases
https://www.kernel.org/pub/software/scm/git/

一 安装

Git 项目托管在 GitHub,因此所有的可下载的大文件都会放在亚马逊的 s3 服务器上。如果发生“s3.amazonaws.com 的响应时间过长”等问题,直接把下载地址的 HTTPS 协议改为 HTTP 即可恢复下载!!!

1) Linux下

  • CentOS:
    CentOS 自带 Git,我的 7.x 版本自带的 Git 版本为 1.8.3.1。
    卸载:yum remove git
    安装:yum install git
    查看版本:git --version
  • Ubuntu(没试过):
    $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
    $ apt-get install git-core
    或者直接:$ apt-get install git

2) Windows下

下载对应的 Windows 版本软件,安装即可。

二 配置

1)Git 环境变量

Git 自带的 config 工具用来配置或读取相应的环境变量。
Git 的环境变量分为三种:

  1. /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  2. ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  3. 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

2)用户信息

配置用户名和电子邮件地址:

$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

3)文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

$ git config --global core.editor emacs

4)差异分析工具

还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:

$ git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。
也可以指定使用自己开发的工具。

5)查看配置信息

要检查已有的配置信息,可以使用 git config –list 命令:

$ git config --list

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。
这些配置我们也可以在 ~/.gitconfig/etc/gitconfig 看到,如下所示:

vim ~/.gitconfig 

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name

6)关于 Linux 和 Windows 的换行符

在 Linux 中,换行符是 \r,而在 Windows 中,换行符是 \r\n

Git 的 Windows 客户端在安装的时候回提示你是否自动转换换行符(core.autocrlf,下载时转为 \r\n,提交时转为 \r),一般没太大影响。如果安装完成后,想切换这个选项,可以通过设置为 false 关闭这个自动转换功能:

git config --global core.autocrlf false

如果关闭换行符自动转换功能,最好开启换行符检查功能(core.safecrlf,在提交时检查文件是否混用了不同风格的换行符),选项如下:

  • false - 不检查
  • warn - 在提交时检查并警告,但不影响提交
  • true - 在提交时检查,如果发现混用则拒绝提交,最好用这个
git config --global core.safecrlf true

3. Git 基本使用

如果只是自己使用,可以用 root 用户访问 Git 仓库。但多人使用时,为了保证最小权限,需要建立 Git 账户,把每个用户的 SSH 公钥放入 Git 账户的 ~/.ssh/authorized_keys 文件,从而通过 Git 账户访问仓库。

一 基本使用

1)指定 Git 仓库

通过 git init 命令可以将当前目录初始化为 Git 仓库。
通过 git init /new/repo 可以将指定目录初始化为 Git 仓库。

创建新仓库

远端已经创建仓库时,通过 git clone 命令可以简单的在本地创建副本:

git clone https://gitlab.kikakika.com/lihongfeng/user-create.git
cd user-create
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
使用已经存在的项目创建仓库

本地的文件已经存在了,但是没有关联任何仓库,此时可以先通过 git init 初始化后,再用 git remote add origin 关联远端仓库:

cd existing_folder
git init
git remote add origin https://gitlab.kikakika.com/lihongfeng/user-create.git
git add .
git commit -m "Initial commit"
git push -u origin master
使用已经存在的 Git 仓库

本地的 Git 仓库已经存在且已经关联了远端仓库,先用 git remote rename origin other-name 将仓库的 origin 标记改为其他名称,再通过 git remote add origin 关联远端仓库:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.kikakika.com/lihongfeng/user-create.git
git push -u origin --all
git push -u origin --tags

2)添加新文件

git add 可以添加单个或多个用空格分隔的文件,支持通配符(使用通配符时需要用引号引起来)。

git add file
git add test1.txt test2.txt
git add '*.txt'

因为 Linux 用 LR (line feed)作为换行符,Windows 用 CRLF(carriage return 和 line feed)。当在不同系统之间传输代码时会有个 warning:

Administrator@DESKTOP-17O04O0 MINGW64 /d/lihongfeng/workspace/first (master)
$ git add ./
warning: LF will be replaced by CRLF in .drone.yml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in main.go.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in main_test.go.
The file will have its original line endings in your working directory.

可以在 git 的命令行中使用下面的命令屏蔽这个警告:

git config core.autocrlf true

3)删除文件

git rm file

3)提交文件

git commit -m "my files"

必须先用 git add 添加要提交的文件,所有通过 git add 添加的文件会一次全部提交。提交之后,文件才真正的进入 Git 仓库。
-m 参数后加注释字符串,也可以不加 -m 参数,会通过编辑器来写注释。
-a 参数可将所有被修改或已删除的且已经被git管理的文档提交到仓库中。

4)从远端服务器获取库

git clone ssh://example.com/~/www/project.git

6)获取远端服务器的更新

git pull

5)推送到服务器

git push ssh://example.com/~/www/project.git

6)查看 Git 状态

通过 git status 命令可以查看以下信息:

  • 当前在哪个分支,一般是 master 分支
  • 如果有变更,是否已经通过 git add 命令添加要 commit 的文件
  • 变更过的文件
git status

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

上面例子中出现了 Changes not staged for commit:,表示没有要 commit 的文件。

7)查看文件修改的部分

git diff readme.txt 

diff --git a/readme.txt b/readme.txt
index 46d4..9db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

8)查看提交日志

git log 显示由近到远的提交日志,可以加 --pretty=oneline 参数只输出 commit id(版本号) 和提交信息:

git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 delete msg
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add msg
cb926e7ea50ad11b8f9e909c05226233bf755030 first commit

SVN 中的版本号是从 1 开始递增的数组,而 Git 中的版本号是通过 SHA1 计算出来的字符串。这是因为 Git 是分布式的版本控制系统,且允许多个人在同一个仓库中工作。

9)历史命令列表

Git 中,git reflog 记录所有用过的命令。对于所有的 commit 命令,都有 commit id

git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

9)版本回退

Git 在内部有个指向当前版本的 HEAD 指针。每次版本回退或者前进,都只是更改 HEAD 指针,仓库中的所有版本都不会变化。

通过 git reset --hard 版本ID 命令回退或前进版本。注意,在版本变更时,文件会自动同步更新。

git reset --hard 3628164
HEAD is now at 3628164 append GPL

4 GitHub

一 简介

GitHub 是一个基于 Git 的代码托管平台,付费用户可以建私人仓库,免费用户只能使用公共仓库(任何人都可以访问)。
你只要在 GitHub 注册了账号,就可以登录进去创建仓库,不再需要在自己的服务器上安装 Git 了。

二 使用

1)注册

github官网地址:https://github.com/

2)安装客户端

下载地址:
https://git-scm.com/downloads
http://gitforwindows.org/

3)配置

首先需要创建 SSH,可以参考这里

  1. 打开 Git Bash,进入命令行界面。
  2. 执行命令 ssh-keygen -t rsa -b 4096 -C "your_email@example.com",邮箱替换为注册 GitHub 用的邮箱。这个命令最终会产生一个新的 SSH Key。命令执行后,会进入一个交互式界面。
  3. 输入 Key 的位置。直接回车用默认位置即可。
    Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):
  4. 输入密码
    Enter passphrase (empty for no passphrase): [输入密码,可以为空]
    Enter same passphrase again: [再次输入密码]
    这里就创建完成了,可以通过命令 cat id_rsa.pub 查看内容。
    命令细节
  5. 在 GitHub 的个人中心,把刚创建的 Key 复制进来,注意保持格式。
    GitHub 界面
  6. 验证,在 Git Bash 命令行界面中执行以下命令。如果没设置密码,则直接连接上,有设置密码在需要输入密码(提示是否 continue 的话,直接输入yes)。
    ssh -T git@github.com
  7. 设置用户名和邮箱地址
$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"

4)操作仓库

1. 从 GitHub 仓库克隆

已经在 GitHub 上有远程仓库时,直接克隆到本地即可:

git clone username@host:/path/to/repository

注意这里使用的协议,Git 默认使用的 git:// 协议是基于 SSH 的,可以从网站上复制下来。当然也可以使用 https:// 协议,速度比较慢且每次都需要输入口令。
从 GitHub 网站复制仓库链接
这里我的完整命令是:

git clone git@github.com:kikajack/kikajack.github.io.git
2. 创建远程仓库

远程仓库的使用可以 参考这里
如果仓库已经在本地建好,可以同步到 GitHub 上的远程仓库。步骤如下:

  • 在 GitHub 上创建一个空仓库,假设名字是 yourRepo
  • 在本地的仓库中运行下面的命令:
    注意,origin 这里是你的远程库的名字,可以根据需要自行设置。
    添加完成后进入 .git,打开 config,这里会多出一个 remote "origin" 内容,这就是刚才添加的远程地址,也可以直接修改 config 来配置远程地址。可以使用 HTTPS 协议:
git remote add origin git@github.com:yourName/yourRepo.git
git remote add origin https://github.com/try-git/try_git.git
  • 把本地库的某个分支(例如 master)的所有内容推送到远程库:
    Git 可以通过 -u 参数把本地的 master 分支和远程的 master 分支关联起来,在以后的 push 或 pull 时可以简化命令,直接使用 git pushgit pull 即可操作这个仓库的 master 分支。关于 -u 参数,可以参考 这里
git push -u origin master
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值