Git中使用.gitignore忽略文件的推送方式

目录
  • 1 简介
  • 2 Git忽略文件提交方法
    • 2.1 在Git项目中定义 .gitignore 文件
    • 2.2 定义Git全局的.gitignore文件
    • 2.3 在Git项目的设置中指定排除文件
  • 3 忽略规则
  • 4 总结

1 简介

在使用Git管理自己的代码版本时,由于编译生成的中间文件,Git使用SHA-1算法来对文件进行加密,进而得出来一个40位的十六进制加密字符串。

325525d8b1f67b5ddd37956a8a728fd26c4ba5ce

但这种算法对于文本文件有效,对于二进制之类的文件则无法正常的进行加密。

因此Git版本管理多管理文本文件,而非二进制之类的文件,例如obj文件、.class文件,,并且一些敏感文件和临时文件、日志文件是不能上传到Git远程仓库中的。

在Git中提供了.gitignore文件,可以制定自己忽略文件。

比如说使用IDEA集成开发环境编写一个项目,在项目根路径下,文件结构如下:

在上图中,由IDEA开发的项目的目录结构如上图所示,其中target目录存放的是项目编译产生的文件,而.idea目录则是特定于IDEA集成开发环境的文件。

demo.iml文件也不需要上传到Git。

2 Git忽略文件提交方法

由于作者在撰写本文时使用IDEA开发,因此以忽略某些IDEA开发环境的特定文件做例子演示

2.1 在Git项目中定义 .gitignore 文件

2.1.1 初始化git仓库

首先打开Git Bash,并且切换到demo根目录,执行git init让git管理该目录。

$ ls -la
total 48
drwxr-xr-x 1 全恒 197609    0 9月  27 09:44 ./
drwxr-xr-x 1 全恒 197609    0 9月  27 09:45 ../
drwxr-xr-x 1 全恒 197609    0 9月  27 09:38 .idea/
drwxr-xr-x 1 全恒 197609    0 8月  29 23:52 .mvn/
-rw-r--r-- 1 全恒 197609 8205 9月  18 17:08 demo.iml
-rwxr-xr-x 1 全恒 197609 6468 8月  22 09:03 mvnw*
-rw-r--r-- 1 全恒 197609 4994 8月  22 09:03 mvnw.cmd
-rw-r--r-- 1 全恒 197609 2707 9月  18 17:06 pom.xml
drwxr-xr-x 1 全恒 197609    0 8月  29 23:52 src/
drwxr-xr-x 1 全恒 197609    0 8月  29 23:52 target/
-rw-r--r-- 1 全恒 197609 5162 8月  28 21:11 zioer5.iml

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo
$ git init
Initialized empty Git repository in D:/Git/demo/demo/.git/

2.1.2 添加远端仓库路径

添加远端仓库,在GitHub上建立repository,demo。拷贝远程仓库目录:

git@github.com:yanchenmochen/demo.git

在demo目录执行命令如下:

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ git remote add origin git@github.com:yanchenmochen/demo.git

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ git remote -v
origin  git@github.com:yanchenmochen/demo.git (fetch)
origin  git@github.com:yanchenmochen/demo.git (push)

然后执行git add .,和执行git commit –m “first commit”,表示该项目的所有文件均被git管理。

2.1.3 新建.gitignore配置文件

在当前目录生成文件.gitignore,并在其中添加要忽略的文件或目录,每行表示一个忽略规则。

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ vim .gitignore

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ cat .git
.git/       .gitignore

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ cat .gitignore
target/
*.iml
.idea/

2.1.4 git管理.gitignore

在上述的代码片段中新建了配置文件.gitignore,然后忽略了target目录,.idea目录,以后缀.iml结尾的文件。

$ 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)

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ git add .gitignore
warning: LF will be replaced by CRLF in .gitignore.
The file will have its original line endings in your working directory.

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   .gitignore

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ git commit -m "[ADD]添加.gitignore配置文件"
[master 202e7b0] [ADD]添加.gitignore配置文件
 1 file changed, 3 insertions(+)
 create mode 100644 .gitignore

上述的代码片段让Git管理了文件.gitignore,并且执行了一次提交,提交到本地仓库。

2.1.5 让Git识别该配置文件

使用命令git config配置忽略配置文件.gitignore。

git config core. excludesfile .gitignore

与配置用户名和邮箱是一样的。

$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[remote "origin"]
        url = git@github.com:yanchenmochen/demo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ git config core.excludesfile .gitignore

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
        excludesfile = .gitignore
[remote "origin"]
        url = git@github.com:yanchenmochen/demo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

2.1.6 推送到远端

全恒@Lenovo-PC MINGW64 /d/Git/demo/demo (master)
$ git push origin master
Enumerating objects: 155, done.
Counting objects: 100% (155/155), done.
Delta compression using up to 8 threads.
Compressing objects: 100% (138/138), done.
Writing objects: 100% (155/155), 83.41 KiB | 749.00 KiB/s, done.
Total 155 (delta 69), reused 0 (delta 0)
remote: Resolving deltas: 100% (69/69), done.
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote:      https://github.com/yanchenmochen/demo/pull/new/master
remote:
To github.com:yanchenmochen/demo.git
 * [new branch]      master -> master

2.1.7 网页查看上传的文件

在这里我们发现,.idea目录,target目录,demo.iml文件等我们想要忽略的文件。

2.1.8 .gitignore不生效

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。这是因为在之前,自己直接使用git add .把所有的文件,包括target目录,.idea目录,然后执行了

git config core.excludesfile ***

.gitignore只能忽略原来没有被跟踪的文件,因此跟踪过的文件是无法被忽略的。因此在网页上可以看到target等目录的存在。

解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m ‘update .gitignore’

2.1.9 再次推送

$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 232 bytes | 232.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:yanchenmochen/demo.git
   202e7b0..9f4fc9c  master -> master

2.1.10 验证

登陆网页,查看本次提交:

2.2 定义Git全局的.gitignore文件

如果一直使用某个开发工具进行开发项目,则相对于特定项目的忽略文件,所有的项目均要忽略的文件,则可以使用配置全局忽略文件。

使用命令

git config --global core.excludesfile ~/.gitignore

该配置信息位于~/.gitignore。

整体的操作步骤与上述特定于项目的.gitignore是一致的,不再赘述。

2.3 在Git项目的设置中指定排除文件

这种方式只是临时指定该项目的行为,需要编辑当前项目下的 .git/info/exclude 文件,然后将需要忽略提交的文件写入其中。

需要注意的是,这种方式指定的忽略文件的根目录是项目根目录。

3 忽略规则

在 .gitignore 文件中,每一行的忽略规则的语法如下:

  • 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
  • #开头的文件标识注释,可以使用反斜杠进行转义
  • ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
  • / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
  • / 开始的模式匹配项目跟目录
  • 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
  • ** 匹配多级目录,可在开始,中间,结束
  • ? 通用匹配单个字符
  • [] 通用匹配单个字符列表

4 总结

Git在程序员开发过程中,不可或缺,因此熟练掌握Git的方方面面,对于提升自己的个人素养和开发效率,不可或缺。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Git版本控制常用命令及pycharm 使用git方法

    版本控制工具 VSS (采用锁机制) CVS SVN (集中式版本控制工具) GIT (分布式版本控制工具) git 服务器 git代码托管平台 github 自己搭建私服 gitblib git 客户端 linux : sudo apt install git window : git.exe git常见的命令 设置 git 用户身份 git config --global user.name '名字' ; git config --global user.email '邮件' ; 初始化一个

  • Git忽略提交的3种方法及Git忽略规则

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交. Git 忽略文件提交的方法 有三种方法可以实现忽略Git中不想提交的文件. 1.在Git项目中定义 .gitignore 文件 这种方式通过在项目的某个文件夹下定义 .gitignore 文件,在该文件中定义相应的忽略规则,来管理当前文件夹下的文件的Git提交行为. .gitignore 文件是可以提交到公有仓库中,这就为该项目下的所有开发者都共享一套

  • Git配置.gitignore文件忽略被指定的文件上传

    在项目的根目录下建立一个.gitignore的文件(和.git文件同级) .gitignore文件用记事本打开,输入如下内容: ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-

  • Git中使用.gitignore忽略文件的推送方式

    目录 1 简介 2 Git忽略文件提交方法 2.1 在Git项目中定义 .gitignore 文件 2.2 定义Git全局的.gitignore文件 2.3 在Git项目的设置中指定排除文件 3 忽略规则 4 总结 1 简介 在使用Git管理自己的代码版本时,由于编译生成的中间文件,Git使用SHA-1算法来对文件进行加密,进而得出来一个40位的十六进制加密字符串. 325525d8b1f67b5ddd37956a8a728fd26c4ba5ce 但这种算法对于文本文件有效,对于二进制之类的文件

  • 解决使用commit提交大文件无法推送到远程库问题及git rebase使用详解

    解决这个问题并没有特别的(删除提交历史中某个文件,然后重新push),但是由于开始的使用失误,中间有使用git rebase和git reset命令处理,所以特此记录下 大文件无法push到远程仓库 问题 首先,故事(事故)的起因是这样的. 某次git push(类似测试使用,没有分支)到远程仓库时发生如下无法提交大文件的报错(大文件是一个pdf文件) $ git push Enumerating objects: 204, done. Counting objects: 100% (204/2

  • java中创建、写入文件的5种方式

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files.write(Java 7 推荐) PrintWriter File.createNewFile FileOutputStream.write(byte[] b) 管道流 实际上不只这5种,通过管道流的排列组合,其实有更多种,但是笔者总结的这五种可以说是最常用及最佳实践, 前提小知识 以前我在写技术文

  • Python中Selenium上传文件的几种方式

    目录 1. input 元素上传文件 2. input 元素隐藏 3. 文件选择对话框 4. 使用 pywinauto 上传文件 5. pyautogui 6. 并发问题 Selenium 封装了现成的文件上传操作.但是随着现代前端框架的发展,文件上传的方式越来越多样.而有一些文件上传的控件,要做自动化控制会更复杂一些,这篇文章主要讨论在复杂情况下,如何通过自动化完成文件上传. 1. input 元素上传文件 如果页面需要文件上传,那么在大多数情况下,都能在页面源代码中找到一个input的元素.

  • Android实现几种推送方式解决方案

    本文介绍在Android中实现推送方式的基础知识及相关解决方案.推送功能在手机开发中应用的场景是越来起来了,不说别的,就我们手机上的新闻客户端就时不j时的推送过来新的消息,很方便的阅读最新的新闻信息.这种推送功能是好的一面,但是也会经常看到很多推送过来的垃圾信息,这就让我们感到厌烦了,关于这个我们就不能多说什么了,毕竟很多商家要做广告.本文就是来探讨下Android中实现推送功能的一些解决方案,也希望能够起到抛砖引玉的作用.^_^ 1.推送方式基础知识: 在移动互联网时代以前的手机,如果有事情发

  • Android中使用socket通信实现消息推送的方法详解

    原理 最近用socket写了一个消息推送的demo,在这里和大家分享一下. 主要实现了:一台手机向另外一台手机发送消息,这两台手机可以随时自由发送文本消息进行通信,类似我们常用的QQ. 效果图: 原理:手机通过socket发送消息到服务器,服务器每接收到一条消息之后,都会把这条消息放进一个messageList里面,服务器会不停地检测messageList是否含有消息,如果有的话就会根据messageList里面item的数据,推送到相应的另一端手机上面. 下面简单画了一个图来说明这个原理: 演

  • SignalR中丰富多彩的消息推送方式的实现代码

    在上一篇 SignalR 文章中,演示了如何通过 SignalR 实现了简单的聊天室功能:本着简洁就是美的原则,这一篇我们也来聊聊在 SignalR 中的用户和组的概念,理解这些基础知识有助于更好的开发基于 SignalR 的应用,通过对用户和分组的理解,进一步扩展出对用户和分组的管理,以及消息推送的各种方式,为全面接入 SignalR 做准备. 1. 用户 在 SignalR 中,用户表示连接,一个用户代表一个连接,一个"系统用户"可以创建多个连接身份,通过函数集线器,可以给一个用户

  • 详解IOS开发中生成推送的pem文件

    详解IOS开发中生成推送的pem文件 具体步骤如下: 首先,需要一个pem的证书,该证书需要与开发时签名用的一致. 具体生成pem证书方法如下: 1. 登录到 iPhone Developer Connection Portal(http://developer.apple.com/iphone/manage/overview/index.action )并点击 App IDs 2. 创建一个不使用通配符的 App ID .通配符 ID 不能用于推送通知服务.例如,  com.itotem.ip

  • idea推送项目到gitee中的创建方法

    目录 springboot初始化器新建项目 项目结构 idea工具类中初始化本地git仓库 add 到缓存区 commit 到本地库 文件颜色状态描述 gitee初始化远程仓库 idea中建立远程仓库 push推送到远程仓库 push报错 pull拉起远程仓库 springboot初始化器新建项目 项目结构 idea工具类中初始化本地git仓库 选择当前项目目录即可 工具类由VCS变成了Git add 到缓存区 对红色文件右键,选择git-->add,添加到缓存区中.也可以选择整个目录一起进行添

  • git如何还原到某次commit并强制推送远程

    目录 git还原到某次commit并强制推送远程 一.reset git第一次提交代码至远程仓库-强制推送 一.首次提交代码到git仓库 二.git仓库操作 git还原到某次commit并强制推送远程 不可逆提交 一.reset 1.git log查看提交记录 git log 2.选择某次提交的commit ID,ctrl+c复制提交ID 补充:按q退出日志到输入模式 3.使用git reset –hard 还原到某一次提交 git reset --hard commit ID 这样只会把远程版

随机推荐