赞
踩
在之前的外企不可以上外网,所以一直没有写博客的习惯,如果进入了一家新公司管理不像以前那样严格,准备把自己的成长之路分享给大家,希望能够帮助那些想在程序员道路上有一番作为的年轻人。
言归张转,今天给大家分享一下Git&GitHub的基础知识。
Github作为一个开元平台,一个程序员尽早了解和使用它是大有裨益的。
基于Linux Ubuntu系统Git和GitHub的安装:
如果想查看Ubuntu版本可以使用以下命令:
cat /etc/issue
我使用的Ubuntu版本是:16.04.6
在Ubuntu上安装Git工具也很简单,只需要执行以下命令就可以了:
apt install git
使用Git的第一件事就是设置你的名字和email,这些就是你在提交commit时的签名,每次提交记录里都会包含这些信息。使用git config命令进行配置:
- [root@linuxidc ~]# git config --global user.name "linuxidc"
- [root@linuxidc ~]# git config --global user.email "linuxidc@linuxidc.com"
执行了上面的命令后,会在家目录(/root
)下建立一个叫.gitconfig
的文件(该文件为隐藏文件,需要使用ls -al
查看到). 内容一般像下面这样,可以使用vim或cat查看文件内容:
- [root@linuxidc ~]# cat .gitconfig
- [user]
- name = linuxidc
- email = linuxidc@linuxidc.com
上面的配置文件就是Git全局配置的文件,一般配置方法是git config --global <配置名称> <配置的值>
。
如果你想使项目里的某个值与前面的全局设置有区别(例如把私人邮箱地址改为工作邮箱),你可以在项目中使用git config
命令不带--global
选项来设置. 这会在你当前的项目目录下创建.git/config
,从而使用针对当前项目的配置。
后续有时间另写一篇教程,这里不在赘述...
- Ubuntu@VM-0-26-ubuntu:~$ sudo ssh-keygen -t rsa -C "linuxidc@linuxidc.com"
- Generating public/private rsa key pair.
- Enter file in which to save the key (/root/.ssh/id_rsa):
- Created directory '/root/.ssh'.
- Enter passphrase (empty for no passphrase):
- Enter same passphrase again:
- Your identification has been saved in /root/.ssh/id_rsa.
- Your public key has been saved in /root/.ssh/id_rsa.pub.
- The key fingerprint is:
- SHA256:Ia1lou/M0ZNnLW6Dly9+Ws1kX89Uq5eF9wUBgFGChDA linuxidc@linuxidc.com
- The key's randomart image is:
- +---[RSA 2048]----+
- | E. o..o+o.... |
- | .. .... . |
- | o = . .|
- | . * . oo|
- | . . S +.*|
- | . . . . =.=B|
- | o +.+.o.oo=|
- | + ..=*o. . |
- | + ++*. |
- +----[SHA256]-----+
显示如上则表示创建成功。注意,上面命令中的邮箱"linuxidc@linuxidc.com"
请更换为自己的邮箱,后面密钥设置密码,这里我无需设置,直接一路回车就行。
/root/
下生成一个.ssh
文件,因为要进入 /root
目录,所以需要转为root身份:- ubuntu@VM-0-26-ubuntu:~$ sudo -s
- root@VM-0-26-ubuntu:~# cd /root
- root@VM-0-26-ubuntu:/root# cd .ssh/
- root@VM-0-26-ubuntu:/root/.ssh# ls -l
- total 8
- -rw------- 1 root root 1675 May 18 16:14 id_rsa
- -rw-r--r-- 1 root root 399 May 18 16:14 id_rsa.pub
id_rsa.pub
,复制里面的key
GitHub,Settings/SSH and GPG keys/New SSH key
ssh -T git@github.com
验证是否安装成功- root@VM-0-26-ubuntu:~# ssh -T git@github.com
- The authenticity of host 'github.com (192.30.253.112)' can't be established.
- RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
- Hi linuxidc! You've successfully authenticated, but GitHub does not provide shell access.
按提示输入yes,看到You've successfully authenticated, but GitHub does not provide shell access则表示连接成功。
既然我们现在把一切都设置好了,那么我们需要一个Git仓库。有两种方法可以得到它:一种是从已有的Git仓库中clone (克隆,复制);还有一种是新建一个仓库,把未进行版本控制的文件进行版本控制。
为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL). Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)://, git://
. 有些仓库可以通过不只一种协议来访问。
这里在我的GitHub上提供的一个名字为GitTest的仓库供大家测试的公有仓库,这个仓库可以使用下面方式进行clone:
- [root@linuxidc ~]# git clone https://github.com/linuxidc/GitTest.git
- 正克隆到 'GitTest'...
- remote: Counting objects: 6, done.
- remote: Compressing objects: 100% (5/5), done.
- remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
- Unpacking objects: 100% (6/6), done.
GitTest
仅是测试项目,里面仅有README.md和LICENSE文件。- [root@linuxidc ~]# cd GitTest/
- [root@linuxidc GitTest]# ls
- LICENSE README.md
可以对一个已存在的文件夹用下面的命令让它置于Git的版本控制管理之下。
- [root@linuxidc gitproject]# cd ~
-
- [root@linuxidc ~]# mkdir project
- [root@linuxidc ~]# cd project/
-
- [root@linuxidc project]# git init
-
- 初始化空的 Git 版本库于 /root/project/.git/
通过ls -la
命令会发现project
目录下会有一个名叫.git
的目录被创建,这意味着一个仓库被初始化了。可以进入到.git
目录查看下有哪些内容。
git基本工作流程如下:
git add
命令添加新创建或修改的文件到本地的缓存区(Index)git commit
命令提交到本地代码库git push
命令将本地代码库同步到远端代码库file1,file2,file3
:- [root@linuxidc ~]# cd project/
-
- [root@linuxidc project]# touch file1 file2 file3
- [root@linuxidc project]# echo "test" >> file1
-
- [root@linuxidc project]# echo "test" >> file2
-
- [root@linuxidc project]# echo "test" >> file3
git status
命令查看当前git仓库的状态:- [root@linuxidc project]# git status
-
- # 位于分支 master
-
- #
-
- # 初始提交
-
- #
-
- # 未跟踪的文件:
-
- # (使用 "git add <file>..." 以包含要提交的内容)
-
- #
-
- # file1
-
- # file2
-
- # file3
-
- 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
可以发现,有三个文件处于未跟踪(untracked)状态,下一步我们就需要用git add
命令将他们加入到缓存区(Index)。
git add
命令将新建的文件添加到:[root@linuxidc project]# git add file1 file2 file3
git status
就会发现新的变化:- [root@linuxidc project]# git status
-
- # 位于分支 master
-
- #
-
- # 初始提交
-
- #
-
- # 要提交的变更:
-
- # (使用 "git rm --cached <file>..." 撤出暂存区)
-
- #
-
- # 新文件: file1
-
- # 新文件: file2
-
- # 新文件: file3
-
- #
git diff
命令再加上 --cached 参数,看看缓存区中哪些文件被修改了。[root@linuxidc project]# git diff --cached
如果没有--cached
参数,git diff
会显示当前你所有已做的但没有加入到索引里的修改。
如果你要做进一步的修改, 那就继续做, 做完后就把新修改的文件加入到缓存区中。
git commit
提交到本地仓库:- [root@linuxidc project]# git commit -m "add 3 files"
-
- [master(根提交) bbb9a52] add 3 files
-
- 3 files changed, 3 insertions(+)
-
- create mode 100644 file1
-
- create mode 100644 file2
-
- create mode 100644 file3
需要使用-m
添加本次修改的注释,完成后就会记录一个新的项目版本。
git add
命令,我们还可以用下面的命令将所有没有加到缓存区的修改也一起提交,但-a命令不会添加新建的文件。$ git commit -a -m "add 3 files"
再次输入git status
查看状态,会发现当前的代码库已经没有待提交的文件了,缓存区已经被清空。
至此,我们完成了第一次代码提交,这次提交的代码中我们创建了三个新文件。需要注意的是如果是修改文件,也需要使用git add
命令添加到缓存区才可以提交。如果是删除文件,则直接使用git rm
命令删除后会自动将已删除文件的信息添加到缓存区,git commit
提交后就会将本地仓库中的对应文件删除。
为你的项目添加一个新的远程仓库
本地仓库是创建完成了,现在需要与远程的仓库进行链接。
- [root@linuxidc project]# git remote
- [root@linuxidc project]# git remote add origin git@github.com:linuxidc/project.git
- [root@linuxidc project]# git remote -v
- origin git@github.com:linuxidc/project.git (fetch)
- origin git@github.com:linuxidc/project.git (push)
推送到远程仓库
这个时候如果本地的仓库连接到了远程Git服务器,可以使用下面的命令将本地仓库同步到远端服务器:(注意,需要与远程仓库连接)
- [root@linuxidc project]# git push -u origin master
- Warning: Permanently added the RSA host key for IP address '192.30.255.113' to the list of known hosts.
- Counting objects: 14, done.
- Delta compression using up to 4 threads.
- Compressing objects: 100% (10/10), done.
- Writing objects: 100% (14/14), 1.16 KiB | 0 bytes/s, done.
- Total 14 (delta 2), reused 0 (delta 0)
- remote: Resolving deltas: 100% (2/2), done.
- To git@github.com:linuxidc/project.git
- * [new branch] master -> master
- 分支 master 设置为跟踪来自 origin 的远程分支 master。
上面使用git push
时带上了-u
参数,是将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
从远端仓库下载新分支与数据
git fetch
会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。- [root@linuxidc project]# git remote -v
- origin git@github.com:linuxidc/project.git (fetch)
- origin git@github.com:linuxidc/project.git (push)
- [root@linuxidc project]# git fetch origin
- remote: Counting objects: 3, done.
- remote: Compressing objects: 100% (2/2), done.
- remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
- Unpacking objects: 100% (3/3), done.
- 来自 github.com:linuxidc/project
- 6c3b072..4d38d99 master -> origin/master
git fetch origin
会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。
- [root@linuxidc project]# git branch -r
- origin/master
-
- [root@linuxidc project]# git branch -a
- * master
- remotes/origin/master
上面命令表示,本地主机的当前分支是master,远程分支是origin/master。
git checkout
命令创建一个新的分支。- [root@linuxidc project]# git checkout -b newBrack origin/master
- 分支 newBrack 设置为跟踪来自 origin 的远程分支 master。
- 切换到一个新分支 'newBrack'
上面命令表示,在origin/master的基础上,创建一个新分支。
git merge
命令或者git rebase
命令,在本地分支上合并远程分支。- [root@linuxidc project]# git merge origin/master
- Already up-to-date.
-
- [root@linuxidc project]# ls
- file1 file2 file3 README.md
上面命令表示在当前分支上,合并origin/master。此时使用ls
就可以查看到我刚刚在仓库段创建的README.md文件了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。