上传到远程库
第一次上传
git add .
git commit -m"备注信息"
之后上传
git add .
git commit -m"备注信息"
git push origin 或 git -u push origin 指定origin为默认主机,后面就可以不加任何参数使用git push了
—————————————————
删除
$ git rm -h
用法:git rm [<选项>] [--] <文件>...
-n, --dry-run 演习
-q, --quiet 不列出删除的文件
--cached 只从索引区删除
-f, --force 忽略文件更新状态检查
-r 允许递归删除
--ignore-unmatch 即使没有匹配,也以零状态退出
删除远程仓库文件:
1.git rm 文件名
( -r
递归删除)
2.git commit -m"备注信息"
更新本地库
3.git push -u origin master
更新远程仓库
—————————————————
—————————————————
—————————————————
————————————————————————————————————
代码托管分两种,一种是SVN一种是GIT,二者都是一种技术;
集中式管理 :SVN(客户端:TottoiseSVN)
分布式管理 :GIT(客户端:sourcetree)
学习GIT不需要有SVN基础,但GIT都是Linux命令;
集中还是分散是针对每个开发者手中的代码而言的,具体不解释了。我常用的是GIT,使用命令行居多,偶尔使用图形化git–sourcetree;初学者可能对这一套东西不好理解,不会很深的体会到这么做对开发意义有多大。
代码托管说白了就是保管码书写的任意提交过的状态,那一刻的项目代码是什么样,我要是想回退到那一刻就可以回到哪。
之前代码遇到bug,但是要放下手头开发进度。这时可以另开一个hotfix热修复分支,没问题再合并到主分支上。git的log日志记录了这个项目的从生到死,每一步历程。N年后老子要回到V1.0版本也没人能拦住你。
GIT:版本控制
版本控制的思想(1.个人;2.团队)
个人:
代码修改的历史记录很多,如果已经写到了很复杂的状态,想进行修改,在复杂代码上修改很容易造成错误;
想回到过去,有没有后悔药吃?
团队:
团队中多人可能会一起开发同一个类(协同开发),若有人把别人写的优秀代码删除了,覆盖上了自己写的不合格的代码,这时就需要版本控制的思想来解决;
版本控制工具应该具备的功能:
- 1.协同修改:多人一起修改服务端统一文件;
- 2.数据备份:
- 3.版本管理:保存每一个版本的文件信息需要 不保存重复数据 ,以节省存储空间,GIT采用文件快照方式,SVN采用增量式管理方式(保存修改部分);
- 4.权限控制:对团队中开发人员进行权限区别;且GIT有独家功能:对团队外人员贡献的代码进行审核;
- 5.历史记录:
- 6.分支管理:让开发团队在工作过程中有多条生产线同时推进任务,提高效率;
GIT的优势: - 大部分操作在本地完成,不需联网(集中式系统一定要联网);
- 完整性保证:提交前的数据 - Hash - 提交后的数据(不管Hash运算多少次,得到的结果都是不变的;输入的数据变了一点,Hash提交后的数据就会变很多,这是Hash神奇之处);
- 尽可能添加数据而不是删除或修改数据;(代码 删/修改 后就找不回了,GIT尽量进行添加,而不是修改)
- 分支操作快捷流畅;
- 与Linux命令全面兼容;
Git和代码托管中心,比如GitHub
代码托管中心的任务:维护远程库;
参照上一张图,项目提交到本地库后,还需要交互到远程库;
- 提问:【本地库】和【远程库】如何交互?
两种情况:
1.团队内 协同开发图
(注意:PULL = FETCH + MERGE)
2.跨团队 协作图;
注意fork和clone区别(图中有写)
(注意:PULL = FETCH + MERGE)
托管中心 - 在局域网内:
可搭建:GitLab服务器
托管中心 - 在外网中:
可搭建:GitHub / 码云
GIT操作
分为两部分:1.GIT命令行操作;2.GIT图形化界面操作;
GIT命令行操作
本地库操作
——————————————————
- 提问:如何初始化本地仓库?
进入想建立目录的路径下;
git init
返回:Initialized empty Git repository in /xxx/Documents/Git/wechat/.git/
;
此路径下建了一个空的Git仓库;
Linux下文件名前带了个点的都是默认隐藏的,想查看他?
ls -a
看看.git
里有什么?
ls .git
HEAD description info refs
config hooks objects
这就是本地库的效果!!!
注意!!
.git
目录里存放的是本地库相关的子目录和文件,不要删除,要不要胡乱修改!!!
(知道它的存在即可,不要改动)
另外还需要设置签名;
形式:
- 用户名:(必填)
- Email:(选填)
**作用:**只是为了区别程序员不同的身份;
注意:代码托管中心
的账号密码和签名
的用户密码没有任何关系!!
这两个信息其实无关紧要,邮箱填不填都无所谓;
一个项目里,碰到两个用户名和密码一样的人也是有可能的;
代码托管网站的账户才是区分个人信息的标准;
设置签名的命令:
(默认系统用户级别)
- 项目级别(仓库级别):仅在本地库范围内有效,比如
/xxx/Documents/Git/wechat
; - 系统用户级别:
git config --global
登录当前Apple账号的用户范围;
git config user.name 名字
git config user.email 邮箱
git config --global user.name 名字
git config --global user.email 邮箱
查看 项目级别 的保存:
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[user]
email = [email protected]
name = xxxx
查看 系统用户级别 的保存:
进入系统本账户文件夹:
$ls -la|less
(查看隐藏信息)
看到了drwx------ 3 xxxx staff 96 Mar 5 09:33 .config
$ cat .gitconfig
[user]
name = xxxx
email = [email protected]
——————————————————
【git status
查看项目状态】
作用:查看工作区、暂存区状态;
进入项目路径:
$ cd /Users/chiu/Documents/Git/wechat
$ git status
返回:
On branch master 现在在master分枝上;
No commits yet 本地库无已commit的内容;
nothing to commit (create/copy files and use “git add” to track)(暂存区里没内容)
【路径内随便新建一个文档,再查看项目状态】:
$ vim good.txt
$ git status
返回:
On branch master
No commits yet
Untracked files: 发现了未追踪的文件
(use "git add <file>..." to 【include】 in what will be committed)
(提示:用 git add 把他提交到暂存区)
good.txt (显示为红色)
nothing added to commit but untracked files present (use "git add" to track)
(不能commit,即暂存区无内容;但未追踪的文件存在)
(新建文件时:要想track文件,必须先git add)
【git add
后,查看项目状态】
git add .
git add *
ADD全部文件;
作用:把工作区的“新建/修改”添加到暂存区;
$ git add good.txt
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage) 用 git rm --cached 来撤回
new file: good.txt (显示为绿色,因为git add后到了暂存区)
试试看撤回!
$ git rm --cached good.txt
rm ‘good.txt’
【git commit
后,查看项目状态】
提示需要输入信息,类似代码中的写注释;于是有两种方式:
- (1).
git commit -m "信息内容" 文件名
- (2).
git commit 文件名
,直接进入VIM编辑;
$ git commit --amend
:修改上一次已经commit的信息;
例子:
(1).git commit -m "My first commit of "good.txt",new file或者modified " good.txt
(2).
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: good.txt
下面进入VIM操作,输入完成保存退出即可;
:set nu
显示行号
i
进入Insert模式
输入信息,比如:My first commit new file: good.txt
esc
退出Insert模式
:wq
保存退出
返回:
root-commit
:根提交 只在新建文件时出现,之后的修改都不会有root-commit出现;
0af5132
:可以粗略认为是本次commit的版本号;
后面就是自己写的备注;
9 insertions(+)
:本次commit新增的行数(cat 文件名
即可查看);
100644
:文件权限;
[master (root-commit) 0af5132] My first commit new file: good.txt
1 file changed, 9 insertions(+)
create mode 100644 good.txt
$ git status
On branch master
nothing to commit, working tree clean 暂存区没有可Commit的;
—————————
以上是新建文件Commit,那么修改文件呢?
修改工作区的文件后,需要重新add到暂存区,commit到本地库;
$ vim good.txt
(比如我删除了几行)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to 【update】 what will be committed) (之前是【include】)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: good.txt (MODIFIED:被修改了)(红色)
no changes added to commit (use "git add" 【and/or】 "git commit -a")
(可以先add再commit,也可以)
(修改文件时:若文件已经tracked,可以git