git learn (1)

版本库(代码仓库)

分布式版本控制系统git是用C写的。
本机器上的Git仓库配置(用户名和Email地址)

$ git config --global user.name "userName"
$ git config --global user.email "email@**.com"

版本库(代码仓库)repository
git可以跟踪文件的修改操作,任何时候都能追踪历史并还原。
二进制文件只能知道是否改动了,但是改动了什么是无法获知的。word就是二进制格式。
字符设置最好是UTF-8
windows的记事本编辑文件时会在文件的开头加上0xefbbbf(十六进制)的字符。

创建一个版本库:

[~]$ mkdir git_test
[~]$ cd git_test
[git_test]$ git init

管理组员

查看组内成员所有的情况:

$ cat /etc/group
man:x:15:   #group_name:passwd:GID:user_list
#查看某一个组内的所有成员:
$ cat /etc/group |grep groupname
edemon:x:1000:
sambashare:x:128:edemon
# 第四列如果什么都没有表明该组内组名组员就是唯一的成员。

$ sudo groupadd jordan   #添加组
#先将新成员加入组,再设置密码。不然会提示,用户已存在 
$ sudo useradd -G jordan y1  # 添加组成员y1
$ sudo passwd y1        
$ sudo groupdel jordan     #删除组jordan
$ sudo vim /etc/group    #编辑文件/etc/group,可以删除某一个组内的成员

文件操作

向仓库中添加文件 (add + commit):

$ git config --global user.name "username"
$ git config --global user.email "email"
$ vim test.txt
$ ls
test.txt
$ git add test.txt
$ git commit -m "add test.txt file"
[master(根提交) bd36aeb] add test.txt file
 1 file changed, 2 insertions(+)
 create mode 100644 test.txt

分布式系统

分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,工作的时候就不需要联网了。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,用来方便“交换”大家的修改。

修改文件并提交

git status 查看当前git的状态

$ git status
# 位于分支 master
# 无文件要提交,干净的工作区
$ ls
test.txt
$ vim test.txt      // 修改test.txt
$ git add test.txt
$ git status
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#   修改:      test.txt
#
$ git commit -m "change and commit test.txt"
[master 9c04872] change and commit test.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

可以用git diff查看改动的内容

注意,在commit之前查看!

$ git diff test.txt
diff --git a/test.txt b/test.txt
index 01bc9f2..62c2a74 100644
--- a/test.txt
+++ b/test.txt
@@ -1,2 +1,2 @@
-hello, this is a test file.
+hello, world. this is a test file.
 all server for git

查看git日志

$ git log
commit c76ada5b16f28252b7cf7950f5803f1535618d2f
Author: username <email>
Date:   Wed Jul 27 13:49:37 2016 +0800

    3rd change

commit 9c0487219879f5afcd41e7f3005f18e003948aab
Author: username <email>
Date:   Wed Jul 27 13:10:41 2016 +0800

    change and commit test.txt

commit bd36aebc6854d6ac6ae19318437b5a66534e4137
Author: username <email>
Date:   Wed Jul 27 12:51:38 2016 +0800

    add test.txt file

改动版本到任意阶段

回到过去:

$ git reset --hard bd36aebc6854d6ac   // hard参数后面添加commit的ID号即可

此时再查看日志,就不包含“未来”的记录了:

$ git log
commit bd36aebc6854d6ac6ae19318437b5a66534e4137
Author: username <email>
Date:   Wed Jul 27 12:51:38 2016 +0800

    add test.txt file

为了穿越到未来,可以使用 git reflog

$ git reflog
bd36aeb HEAD@{0}: reset: moving to bd36aebc6854d6ac
c76ada5 HEAD@{1}: commit: 3rd change
9c04872 HEAD@{2}: commit: change and commit test.txt
bd36aeb HEAD@{3}: commit (initial): add test.txt file

第一列就是commit id
返回未来:

$ git reset --hard c76ada5
HEAD 现在位于 c76ada5 3rd change
$ cat test.txt
hello, world. this is a test file.
all server for git.
this is 3rd chenge.

暂存区与工作区

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
文件提交的两步:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区; // 实现多次修改,一次提交
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

删除文件

当我们删除工作区的文件,和版本库中的文件情况不符,使用git status可以发现提示信息:

$ git status
# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#   删除:      t.txt
#

修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)
查看工作区的文件已经删除:

$ rm t.txt
$ ls
test.txt

可以通过git checkout <file>恢复过来:

$ git checkout -- t.txt
$ ls
test.txt  t.txt

也可以彻底删除:

$ git rm t.txt
rm 't.txt'
$ ls
test.txt

git管理的是文件的修改,所以我们可以多次修改,多次git add,最后一次性的
git commit -m "message"

关联远程库github

GitHub创建一个Git仓库,让备份的github和本地仓库同步。
GitHub官网,右上角创建repository.

公钥的目录:

edemon@ubuntu:~/.ssh$ ls -a
.  ..  id_rsa  id_rsa.pub  known_hosts

一个常见的问题:
fatal: remote origin already exists.
解决方法:
$ git remote rm origin

push

命令行传送文件至远程库:

echo "# wei_workspace" >> README.md  #建立一个说明文件
git init
git add README.md
git commit -m "first commit"  #提交文件
git remote add origin https://github.com/×××/×××.git
git push -u origin master  #传送文件到远程库,并且-u将本地的master分支和远程库的master分支关联起来

$ git push origin master    #之后不用-u参数了,已经关联了。

clone

克隆一个仓库:
https://github.com/×××/wei_workspace.git

#创建新的目录,并克隆文件到所创建的目录
jordan@ubuntu:~$ git clone git@github.com:×××/wei_workspace.git ~/wei_workspace  

注意到这两种地址格式是不同的,git@github.com:×××/wei_workspace.git是ssh的,https://github.com/×××/wei_workspace.git是https的
https: 速度慢,每次推送都必须输入口令.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值