平台:rhel7.2 x86_64bit
安装:
yum install git -y
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:
/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。
每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。
[root@original gitdemo]# git config –list
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
用户信息
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
[root@original gitdemo]# git config --global user.name "lockey23"
[root@original gitdemo]# git config --global user.email iooiooi23@163.com
[root@original gitdemo]# git config --list
user.name=lockey23
user.email=iooiooi23@163.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
获取 Git 仓库
有两种取得 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。
在现有目录中初始化仓库
[root@original ~]# mkdir gitdemo
[root@original ~]# cd gitdemo/
[root@original gitdemo]# ls
[root@original gitdemo]# git init
Initialized empty Git repository in /root/gitdemo/.git/
[root@original gitdemo]# l.
. .. .git
[root@original gitdemo]# ls -a .git/
. .. branches config description HEAD hooks info objects refs
以下为几个常用命令演示(状态查看、添加文件、commit):
[root@original gitdemo]# echo '### This is a test repo for git' >readme.md
[root@original gitdemo]# git status -s
?? readme.md
[root@original gitdemo]# git add readme.md
[root@original gitdemo]# git status -s
A readme.md
[root@original gitdemo]# git commit -m 'add a test readme'
[root@original gitdemo]# git diff
diff --git a/readme.md b/readme.md
index 2883bae..4185319 100644
--- a/readme.md
+++ b/readme.md
@@ -1 +1,3 @@
### This is a test repo for git
+
+##### hello git
[root@original gitdemo]# git status -s
M readme.md
[root@original gitdemo]# git commit -m 'modify readme'
# 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.md
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@original gitdemo]# git status -s
M readme.md
[root@original gitdemo]# git add readme.md
[root@original gitdemo]# git commit -m 'modify readme'
[master 65eb016] modify readme
1 file changed, 2 insertions(+)
[root@original gitdemo]# git reflog
65eb016 HEAD@{0}: commit: modify readme
a97d46c HEAD@{1}: commit (initial): add a test readme
[root@original gitdemo]# git reset -- readme.md
[root@original gitdemo]# cat readme.md
### This is a test repo for git
##### hello git
[root@original gitdemo]# git reset --hard HEAD^
HEAD is now at a97d46c add a test readme
[root@original gitdemo]# cat readme.md
### This is a test repo for git
[root@original gitdemo]# git reflog
a97d46c HEAD@{0}: reset: moving to HEAD^
65eb016 HEAD@{1}: commit: modify readme
a97d46c HEAD@{2}: commit (initial): add a test readme
[root@original gitdemo]# git reset --hard 65eb016
HEAD is now at 65eb016 modify readme
[root@original gitdemo]# cat readme.md
### This is a test repo for git
##### hello git
接下来演示如何在github上创建一个远程仓库并与本地仓库进行关联:
[root@original gitdemo]# git remote add origin https://github.com/LockeyCheng/demo.git
[root@original gitdemo]# git push -u origin master
Username for 'https://github.com': LockeyCheng
Password for 'https://LockeyCheng@github.com':
Counting objects: 9, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (9/9), 732 bytes | 0 bytes/s, done.
Total 9 (delta 0), reused 0 (delta 0)
To https://github.com/LockeyCheng/demo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
[root@original gitdemo]# ls
readme.md README.md
[root@original gitdemo]# cat README.md
# demo
[root@original gitdemo]# git rm readme.md
rm 'readme.md'
[root@original gitdemo]# git commit -m 'remove test readme.md'
[master 38e4699] remove test readme.md
1 file changed, 3 deletions(-)
delete mode 100644 readme.md
[root@original gitdemo]# git push -u origin master
远程仓库查看结果:
做一个远程仓库的本地ssh认证,避免每次提交修改都要输密码:
[root@original gitdemo]# ssh-keygen -t rsa -b 2048 -C "iooiooi23@163.com"
[root@original gitdemo]# ssh-add ~/.ssh/id_rsa
[root@original gitdemo]# cat ~/.ssh/id_rsa.pub #粘贴到github 设置的SSH KEY认证中
删除本地的http认证方式:
[root@original gitdemo]# git remote -v
origin https://github.com/LockeyCheng/demo.git (fetch)
origin https://github.com/LockeyCheng/demo.git (push)
[root@original gitdemo]# git remote rm origin
添加ssh认证方式:
[root@original gitdemo]# git remote add origin git@github.com:LockeyCheng/demo.git
[root@original gitdemo]# ssh -T git@github.com
The authenticity of host 'github.com (192.30.255.112)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
Hi LockeyCheng! You've successfully authenticated, but GitHub does not provide shell access.
测试ssh免密提交:
[root@original gitdemo]# echo 'ssh key ok !' >>README.md
[root@original gitdemo]# git status -s
M README.md
[root@original gitdemo]# git commit -a -m 'ssh commit test'
[master d056c71] ssh commit test
1 file changed, 1 insertion(+)
[root@original gitdemo]# git status -s
[root@original gitdemo]# git push origin master
Warning: Permanently added the RSA host key for IP address '192.30.255.113' to the list of known hosts.
Counting objects: 5, done.
Writing objects: 100% (3/3), 259 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:LockeyCheng/demo.git
38e4699..d056c71 master -> master
对于部分不想进行提交的文件(以.开头文件为例),在仓库主目录下编写一个.gitignore文件,以正则格式书写,示例如下:
[root@original gitdemo]# echo 'do not want to commit' > .ignore
[root@original gitdemo]# git status -s
?? .ignore
[root@original gitdemo]# vim .gitignore
[root@original gitdemo]# cat .gitignore
.*
[root@original gitdemo]# git status -s
[root@original gitdemo]# git reflog
d056c71 HEAD@{0}: commit: ssh commit test
38e4699 HEAD@{1}: commit: remove test readme.md
ceec8be HEAD@{2}: commit: first commit
65eb016 HEAD@{3}: reset: moving to 65eb016
a97d46c HEAD@{4}: reset: moving to HEAD^
65eb016 HEAD@{5}: commit: modify readme
a97d46c HEAD@{6}: commit (initial): add a test readme
[root@original gitdemo]#