Git应用入门

LogicSpecter
• 阅读 889

背景分析

软件项目开发过程中,团队间共享的代码,文档等可能被别人或自己不小心覆盖或遗失、也不知道是谁,因为什么原因改了这段代码、也没办法很好的复原前几天的修改,于是版本控制系统(VCS-Version Control System)诞生。

有了版本控制系统,我们可以浏览所有开发的历史纪录,掌握团队的开发进度,而且作任何修改都不再害怕,因为你可以轻易的复原回之前正常的版本。我们也可以透过分支和标签的功能来进行软件发行的不同版本,例如稳定版本、维护版本和开发中版本。近几年版本控制系统的应用趋势,如图所示:

Git应用入门

版本控制系统(VCS,Version Control System)可以划分为集中式和分布式两大类。集中式顾名思义,是用单一的服务器来集中管理保存项目的所有文件。项目团队的成员通过客户端连接到这台服务器,下载或提交文件。如图所示:

Git应用入门

集中式客户端一旦无法连接服务器,那么版本控制功能将无法使用(例如比较历史版本差异;查看某个历史版本内容等)。集中式的VCS杰出代表是SVN.

分布式的特点是每个客户端除了可以连接到一个集中的服务器外,客户端本身可以是一个完整的版本控制仓库,项目团队成员可以在自己的电脑上对文件进行版本管理。如图所示:

Git应用入门

与集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。分布式的VCS杰出代表是git。

Git简介(Introduction)

Git是一个开源的分布式版本控制系统,作者是传奇人物Linus,著名的开源操作系统Linux作者。liuns花了两周时间自己用C写出了一个Git。现在Linux系统的源码都是由Git进行管理。Git现已是VCS领域的江湖霸主。

Git安装(Setting Up)

下载与安装

Windows和Mac系统, 可以直接从 http://git-scm.com/downloads 网址下载并运行安装程序。对于Windows用户可使用 "Git Bash" 命令行工具(Git安装时自带)使用Git,Mac系统可以直接实用终端窗口"Terminal"。

全局用户信息配置

配置用户和密码

$ git config --global user.name "your-name"
$ git config --global user.email "your-email@youremail.com" 

检查配置信息

$ git config --list
user.email=xxxxxx@xxxxxx.com
user.name=xxxxxx

Git基础(Basic)应用实现

Git 命令简介

Git提供了一组简单、独特、独立的命令,这些命令的执行需要首先启动windows或mac系统的Git终端(window 下可以可使用 "Git Bash"),其语法结构为:

$ git <command> <arguments>

Git 常用命令有:

init, clone, config: 用于启动Git进行项目管理。
add, mv, rm: 用于暂时记录或存储文件的变更.
commit, rebase, reset, tag:
status, log, diff, grep, show: show status
checkout, branch, merge, push, fetch, pull

Git 帮助手册:(可快速获取命令的使用帮助)

$ git help <command>
// or
$ git <command> --help

Git 操作手册官方文档 http://git-scm.com/docs.

Git 快速入门

这里有两种方式启动Git管理项目:

  • 创建或启动一个新项目,然后进行git操作。
  • 从一个Git主机上克隆一个已经存在的项目。

这里我们先从新项目开始,进行入门学习:

首先创建一个git工作目录,命名为githello,然后在目录中创建一个一个Hello.java,其代码为:

public class Hello {
   public static void main(String[] args) {
      System.out.println("Hello, world from GIT!");
   }
}

建议,在Hello.java所在目录同样再创建一个README.md文件,通过此文件对你的项目进行描述,例如在文件中添加如下内容:

This is the README file for the Hello-world project.
  • 初始化git仓库

基于Git实现项目管理时,首先在项目所在的根目录(例如githello)执行"git init",过程如下:

git init 

// Change directory to the project directory
//$ cd /path-to/hello-git
 
// Initialize Git repo for this project

$ git init
Initialized empty Git repository in /path-to/hello-git/.git/

$ ls -al
drwxr-xr-x    1 xxxxx    xxxxx      4096 Sep 14 14:58 .git
-rw-r--r--    1 xxxxx    xxxxx      426 Sep 14 14:40 Hello.java
-rw-r--r--    1 xxxxx    xxxxx       66 Sep 14 14:33 README.md

其中,git init 指令执行结束,git本地库的根目录中会出啊关键一个".git"目录(默认此目录为隐藏状态)。

Git 存储模型,如图所示:

Git应用入门

当我们执行了git init 指令以后,本地库其实是空的的。您需要显式地将文件存入仓库。

  • 暂存和更新文件的变更。
// Add README.md file
$ git add README.md
 
$ git status
On branch master
Initial commit
 
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md
 
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Hello.java
 
// You can use wildcard * in the filename
// Add all Java source files into Git repo
$ git add *.java
 
// You can also include multiple files in the "git add"
// E.g.,
// git add Hello.java README.md
 
$ git status
On branch master
Initial commit
 
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   Hello.java
        new file:   README.md 
1)命令“git add<file>..”接受一个或多个可能带有通配符模式的文件名或路径名。您还可以使用“git add.”添加当前目录(以及所有子目录)中的所有文件。
2)当一个新的文件被执行了“add”操作以后,它将存储到git的暂存区(还并没有commit到本地库)。

Git 使用两道工序提交文件的变更:
1)"git add <file>" 将文件存储到暂存区。
2)"git commit" 将文件的所有变更由暂存取提交到本地库。

  • 提交文件变更(git commit)

    假如我们要将git暂存区文件的变更信息提交到本体库,需要实用"git commit"指令,例如:

$ git commit -m "First commit"
[master (root-commit) 6e49a29] first commit
 2 files changed, 1 insertion(+)
 create mode 100644 Hello.java
 create mode 100644 README.md

接下来还可以查看Git状态:

$ git status

显示Git提交日志信息:

Git每次都会记录提交的元数据,其中包括日志消息、时间戳、作者的用户名和电子邮件等)。我们可以使用"git log"指令显示提交的数据。也可以使用"git log --stat"查看文件的统计(statistics)信息。

$ git log
git log --stat
  • .gitignore 文件

在Git中,有一种特殊的文件,其文件全名就是 .gitignore,,主要功能是基于规则屏蔽某些文件,使得这些文件不被追踪(tracked),自然push后也不会上传到github等平台。这个时候我们只需要在需要执行push操作的目录下创建.gitignore文件,然后定义其规则即可,例如:

# .gitignore
 
# Java class files
*.class

# Executable files
*.exe

# temp sub-directory (ended with a directory separator)
temp/ 

现在,执行“git status”命令来检查未跟踪(untracked)的文件。

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
      .gitignore
nothing added to commit but untracked files present (use "git add" to track)

通常(Typically),我们也会跟踪或提交.gitignore文件,例如:

$ git add .gitignore
 
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        new file:   .gitignore
 
$ git commit -m "Added .gitignore"
[master 711ef4f] Added .gitignore
 1 file changed, 14 insertions(+)
 create mode 100644 .gitignore
  
$ git status
On branch master
nothing to commit, working directory clean

Git远程仓库设置

我们使用Git进行项目管理时,通常会将项目提交到远程仓库,其具体步骤如下:
第一步:创建远程仓库(例如Gitee)-自己创建。
第二步:设置远程仓库名和url映射。
通过 via "git remote add <remote-name> <remote-url>"指令完成,设置名字为 "origin"的远程仓库绑定。
例如:

$ git remote add origin https://gitee.com/JasonCN2008/gittest.git

以列表方式呈现远程仓库名:

$ git remote -v

第三步:推送(Push)和提交(commit)本库内容到远程仓库。

将本地库内容推送到远程库(执行过程需要输入远程仓库账号和密码),其语法为git push -u <remote-name> <local-branch-name>,例如:

$ git push origin master 
实践过程演示:

修改Hello.java文件内容,例如:

public class Hello {
   public static void main(String[] args) {
      System.out.println("Hello, world from GIT!");
      System.out.println("Push and Commit !");
   }
}

执行Git操作

$ git status
// Stage file changes

$ git add *.java

$ git status

// Commit all staged file changes
$ git commit -m "Third commit"
[master 744307e] Third commit
 1 file changed, 1 insertion(+)
 
// Push the commits on local master branch to remote
$ git push origin master 

从远程仓库克隆项目

执行 "git clone <remote-url>" 初始化一个本地库,并将remote-url远程库中资源拷贝到本地库工作目录。例如,首先切换到git工作目录,然后执行:

$ git clone https://gitee.com/JasonCN2008/gittest.git githello-clone

Clone 结束以后,切换到githello-clone目录,执行ls -a指令查看目录中资源。

总结(Summary)

本小节主要是对Git的基本指令操作进行了分析和实践,我们现在再将这些这令总结一下:

// Edit (Create, Modified, Rename, Delete) files。 
// Stage file changes, which produces "Staged" file changes
$ git add <file>                          // for new and modified files
$ git rm <file>                           // for deleted files
$ git mv <old-file-name> <new-file-name>  // for renamed file

// Commit (ALL staged file changes)
$ git commit -m "message"

// Push
$ git push <remote-name> <local-branch-name>
点赞
收藏
评论区
推荐文章
lucien-ma lucien-ma
4年前
Git基础命令教程
Git学习git之前,我们需要先明白一个概念,版本控制!版本控制什么是版本控制版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。实现跨区域多人协同开发追踪和记载一个或者多个文件的历史记录组织和保护你的源代码和文档统计工作量
花了19998买的学习教程!java分布式架构图
Git是什么在回忆Git是什么的话,我们先来复习这几个概念哈什么是版本控制?百度百科定义是酱紫的版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。那些年,我们的毕业论文,其实就是版本变更的真实写照...脑洞一下,版本控制就是这些论文变更的管理什么是集中化的版本控制系统?那么,集中化的版本控制系统
Stella981 Stella981
4年前
Github管理自己的代码
一、名词解释GitGit是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git与常用的版本控制工具CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持。Github
Python进阶者 Python进阶者
4年前
手把手教你搭建集中式版本控制系统SVN服务器
大家好,我是IT共享者,人称皮皮。一、前言我们前段日子学过了分布式版本控制系统git,相信大家都领略到了它的强大,今天我们来说说集中式版本控制系统svn,跟分布式版本控制系统不同的是,集中式版本控制系统旨在用于多个人协同开发一个项目,而且它的版本控制系统都是存放在中央服务器上的,如果你需要使用就得从中央服务器上调用,它不像git,每个用户都可以有自己的版本
Stella981 Stella981
4年前
GitHub和SVN的区别
GitHub和SVN的区别之前用的版本控制系统是SVN,但是最近因为流行使用GitHub,这篇文章认识一下Git和SVN的区别。1)Git是分布式的,SVN不是: 这是git和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上
Stella981 Stella981
4年前
Git和GitHub的基本操作
GIT版本控制系统版本控制系统功能:1.记录版本历史信息(记录每一次修改的记录)2.方便团队之间相互协作开发3.远程开发......常用的版本控制系统cvs/svn:集中式分布系统git:分布式版本控制系统1.GIT工作原
Stella981 Stella981
4年前
CentOS下使用yum安装Git具体步骤
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git是用于Linux内核开发的版本控制工具。与常用的CVS,Subversion等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布
Stella981 Stella981
4年前
Git基础命令篇
一、Git介绍(1)Git是一个开源(LinusTorvalds为了帮助管理Linux内核开发而开发)的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,与常用的版本控制工具CVS,SVN等不同,它采用了分布式版本库的方式,不必服务器端软件支持。(2)Git的工作区、暂存区和版本库:工作区:就
可莉 可莉
4年前
19.03.04JavaWeb作业
Git及用法Git是目前世界上最先进的分布式版本控制系统。Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推
胖大海 胖大海
3年前
Git 原理
简介Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git与常用的版本控制工具CVS,
小万哥 小万哥
2年前
Git入门指南:从新手到高手的完全指南
Git是一种强大的分布式版本控制系统,广泛应用于软件开发中。它的使用不仅可以帮助开发团队更好地管理代码,还可以提高团队协作效率和代码质量。随着软件开发的不断发展,版本控制成为了程序员必备的一项技能。Git作为最流行的分布式版本控制系统,被广泛地应用于软件开