标签归档:Git

将本地项目上传到Github

首先需要在github上新建一个空项目,例如foo.git,此时将得到项目地址:

https://github.com/username/foo.git

之后在本地初始化git并提交。进入项目目录进行以下操作:

# 新建一个README.md的文件,并将项目名写入此文件
echo "# Foo" >> README.md
 
# 初始化本地仓库
git init

# 将README.md文件加入到仓库中 
git add README.md 

# 将文件commit到本地仓库
git commit -m "init"

# 添加远程仓库,origin只是一个远程仓库的别名,可以随意取
git remote add origin https://github.com/username/foo.git

# 将本地仓库push远程仓库,并将origin设为默认远程仓库
git push -u origin master

此时,本地文件夹就与远程git仓库关联起来了。项目中仅有一个README.md的说明文件,接下来将项目的其他文件push到远程仓库

# 新建.gitignore文件,将需要排除的文件/文件夹写入
vim .gitignore

# 添加本地文件
git add .

# 提交到本地仓库
git commit -m "init"

# push到远程仓库
git push origin master

Git常用命令

Git是广泛使用的版本控制系统,它能够很好的保存版本历史信息,同时也使多人合作变得更加高效。为了充分的使用Git所带来的便利,需要学习一些基本的概念和逻辑。在本文中将结合实际应用来说明Git的使用。

本文部分参考了阮一峰的文章:常用 Git 命令清单。有兴趣的可以去看看原文。

Git基本逻辑

git

相应的字典如下:

Workspace: 工作区

Index: 暂存区

Repository: 本地仓库

Remote: 远程仓库

常用Git命令

拷贝远程仓库

git clone [url] [dir]

应用实例

给本地仓库创建git

git remote add [url]
git add .
git commit -m ""
git push origin master

使用远程仓库覆盖本地仓库

git fetch all
git reset --hard origin/master

使用分支b1替换master分支

git fetch all
git checkout master
git reset --hard origin/b1
git push -f origin master

未完待续

文件拷贝后如何保持Git版本控制一致

实际操作中遇到如下问题:在Github上有以下文件:

remote: a b c

使用git clone到本地

local : a b c

然后有以下操作,在本地将b重命名为d(先),在服务器上添加文件e(后)。

于是现在的情况变成了如下:

remote: a b c   e
local : a   c d 
#其中d是由b复制后修改而来

此时,如果在本地使用pull命令,将得到以下结果

remote: a b c   e
local : a   c d e

问题出现:b文件无法被拉取下来,因为服务器上的版本较低,系统认为是重命名操作,b文件并非被删除。而e文件显然被正常拉取

考虑到另一种情况,如果在本地使用的是push命令,则Github上的b文件将被删除并增加一个d文件。

那么如何才能在本地重新获得b文件呢?

答案是:git checkout

在本地执行checkout b,就能把本地仓库的b文件拉取出来:

git checkout b

最后,简单的回顾一下问题:

现状:

remote: a b c   e
local : a   c d

解决:

git pull origin master
git checkout b
git commit
git push origin master

结果:

Github: a b c d e
local : a b c d e

远程仓库和本地保持了一致。复制操作完成。

 

在Linux(Ubuntu)下配置和使用Git

下文由于本人学习时尚未精通,有许多错误,不具有参考价值。@20160223

安装Git

sudo apt-get install git

在GitHub上注册帐号

设置git用户名和邮箱

$ git config --global user.name "<YOUR NAME>"
$ git config --global user.email "<YOUR EMAIL ADDRESS>"
# 尖括号“<>”内为所需要替代的内容,需要用具体项目信息替代,替代应包含尖括号。下同。
# 第一条命令替代后为:$ git config --global user.name "HenryZivers"

SSH配置

查看是否已经存在Key

$ ll -al ~/.ssh

如果key存在则会打印类似如下信息,若不存在则继续。

> id_*.pub

如果上步中有Key则忽略此步,如果没有则创建新的SSH Key

$ ssh-keygen -t rsa -b 4096 -C "<YOUR_EMAIL@EMAIL.com>"
# 引号内输入你的邮箱

接下来将提示配置SSH Key。

第一步默认设置就好,第二部输入一个Private口令,随便输入一段你能够记住的英文就好。

Enter file in which to save the key (/Users/<USERNAME>/.ssh/id_rsa): <回车>
Enter passphrase (empty for no passphrase): <YOUR PHRASE>
Enter same passphrase again: <YOUR PHRASE>

之后将会收到创建成功的提示信息

Your identification has been saved in /home/<USERNAME>/.ssh/id_rsa.
Your public key has been saved in /home/<USERNAME>/.ssh/id_rsa.pub.
The key fingerprint is:
2e:53:b7:eb:00:ed:bc:8d:aa:c3:75:86:90:e3:87:50 <YOUR_EMAIL@EMAIL.com>
The key's randomart image is:
+--[ RSA 4096]----+
|                 |
|    E            |
|   . .           |
|  . +  .         |
|   o +..S .      |
|    o +*o. .     |
|   . ooo= .      |
|    o  o = .     |
|    .o..o.+      |
+-----------------+

将生成的SSH Key加入SSH-Agent首先确认ssh-agent服务已经启用

$ eval "$(ssh-agent -s)"

将SSH Key加入SSH-Agent

$ ssh-add ~/.ssh/id_rsa

连接Github账户首先查看生成的SSH公钥

$ cat ~/.ssh/id_rsa.pub

复制打印出的类似以下的信息,即公钥

ssh-rsa 
···
···
···= <YOUR_EMAIL@EMAIL.com>

在GitHub的任意页面点击头像,选择”setting”->”SSH Keys”->”Add SSH Key”。将上面的公钥填入输入框,Title任取。
测试连接是否成功输入以下命令

$ ssh -T git@github.com

根据提示键入之前设置的口令

<YOUR PHRASE>

返回授权成功信息即连接成功

Git基本用法

  • 创建仓库进入所需要上传文件的目录
$ cd /srv/www/<YOUR_REPO>
  • 创建git环境
$ git init
  • 创建一个本地仓库连接到GitHub
$ git remote add origin git@github.com:<GIT_USERNAME>/<YOUR_REPO>.git
#<GIT_USERNAME>为GitHub用户名,<YOUR_REPO>为要上传到的仓库
  • 克隆项目到本地进入项目需要存放的目录,例如
$ cd /srv/www
  • 使用git clone命令克隆项目到本地
$ git clone https://github.com/<GIT_USERNAME>/<YOUR_REPO>.git
  • push/pull/add/commit/fetch/merge

使用commit命令提交到本地仓库,-m参数可以填入说明信息

$ git commit -m <说明信息>

使用add命令添加文件或目录到本地仓库

$ git add <文件/目录名>

使用push命令提交更改到github仓库

$ git push origin master

使用fetch命令获取最新的版本,使用merge命令将更新的内容合并到本地分支

$ git fetch origin
$ git merge origin/master

直接拉取最新版本合并

$ git pull origin master
  • 分支管理

创建本地分支

$ git branch <分支名>

同步到GitHub

$ git push <本地仓库名>:<分支名>

切换分支

$ git checkout <分支名>

查看分支信息

$ git branch

删除分支

git branch -d <分支名>

将删除命令同步到GitHub

git push <本地仓库名>:<分支名>

Git ignore

可以使用.gitignore方式忽略不需要上传的文件,具体方法为在需要忽略的目录下创建.gitigore文件,在文件内写入需要忽略的文件/目录名

$ touch .gitignore

用vi命令编辑

$ sudo vi .gitignore

以斜杠“/”开头表示目录;

以星号“*”通配多个字符

以问号“?”通配单个字符

以方括号“[]”包含单个字符的匹配列表;

以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

例如:

/foo
# 忽略/foo目录
*.html
# 忽略所有.html文件
/bar/*
# 忽略/bar目录下的所有文件,但不忽略/bar目录本身
!/bar/setting.txt
# 接上条,在忽略/bar目录的前提下,不忽略setting.txt这个文件