为什么80%的码农都做不了架构师?>>>   

--原文出自http://git.oschina.net/progit/7-%E8%87%AA%E5%AE%9A%E4%B9%89-Git.html

格式化与空白

格式化与空白是许多开发人员在协作时,特别是在跨平台情况下,遇到的令人头疼的细小问题。由于编辑器的不同或者Windows程序员在跨平台项目中的文件行尾加入了回车换行符,一些细微的空格变化会不经意地进入大家合作的工作或提交的补丁中。不用怕,Git 的一些配置选项会帮助你解决这些问题。

core.autocrlf

假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题。这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符。虽然这是小问题,但它会极大地扰乱跨平台协作。

Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF:

$ git config --global core.autocrlf true

Linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF,签出时不转换:

$ git config --global core.autocrlf input

这样会在Windows系统上的签出文件中保留CRLF,会在Mac和Linux系统上,包括仓库中保留LF。

如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:

$ git config --global core.autocrlf false

core.whitespace

Git预先设置了一些选项来探测和修正空白问题,其4种主要选项中的2个默认被打开,另2个被关闭,你可以自由地打开或关闭它们。

默认被打开的2个选项是trailing-spacespace-before-tabtrailing-space会查找每行结尾的空格,space-before-tab会查找每行开头的制表符前的空格。

默认被关闭的2个选项是indent-with-non-tabcr-at-eolindent-with-non-tab会查找8个以上空格(非制表符)开头的行,cr-at-eol让 Git 知道行尾回车符是合法的。

设置core.whitespace,按照你的意图来打开或关闭选项,选项以逗号分割。通过逗号分割的链中去掉选项或在选项前加-来关闭,例如,如果你想要打开除了cr-at-eol之外的所有选项:

$ git config --global core.whitespace \trailing-space,space-before-tab,indent-with-non-tab

当你运行git diff命令且为输出着色时,Git 探测到这些问题,因此你也许在提交前能修复它们,当你用git apply打补丁时同样也会从中受益。如果正准备运用的补丁有特别的空白问题,你可以让 Git 发警告:

$ git apply --whitespace=warn <patch>

或者让 Git 在打上补丁前自动修正此问题:

$ git apply --whitespace=fix <patch>

这些选项也能运用于衍合。如果提交了有空白问题的文件但还没推送到上流,你可以运行带有--whitespace=fix选项的rebase来让Git在重写补丁时自动修正它们。

服务器端配置

Git服务器端的配置选项并不多,但仍有一些饶有生趣的选项值得你一看。

receive.fsckObjects

Git默认情况下不会在推送期间检查所有对象的一致性。虽然会确认每个对象的有效性以及是否仍然匹配SHA-1检验和,但 Git 不会在每次推送时都检查一致性。对于 Git 来说,库或推送的文件越大,这个操作代价就相对越高,每次推送会消耗更多时间,如果想在每次推送时 Git 都检查一致性,设置receive.fsckObjects 为true来强迫它这么做:

$ git config --system receive.fsckObjects true

现在 Git 会在每次推送生效前检查库的完整性,确保有问题的客户端没有引入破坏性的数据。

receive.denyNonFastForwards

如果对已经被推送的提交历史做衍合,继而再推送,又或者以其它方式推送一个提交历史至远程分支,且该提交历史没在这个远程分支中,这样的推送会被拒绝。这通常是个很好的禁止策略,但有时你在做衍合并确定要更新远程分支,可以在push命令后加-f标志来强制更新。

要禁用这样的强制更新功能,可以设置receive.denyNonFastForwards

$ git config --system receive.denyNonFastForwards true

稍后你会看到,用服务器端的接收钩子也能达到同样的目的。这个方法可以做更细致的控制,例如:禁用特定的用户做强制更新。

receive.denyDeletes

规避denyNonFastForwards策略的方法之一就是用户删除分支,然后推回新的引用。在更新的 Git 版本中(从1.6.1版本开始),把receive.denyDeletes设置为true:

$ git config --system receive.denyDeletes true

这样会在推送过程中阻止删除分支和标签 — 没有用户能够这么做。要删除远程分支,必须从服务器手动删除引用文件。通过用户访问控制列表也能这么做,在本章结尾将会介绍这些有趣的方式。

转载于:https://my.oschina.net/flylxl/blog/403582

git多系统协作时换行符问题相关推荐

  1. git 乱改你的换行符?一句话设置让 git 不再碰你某个文件的换行符

    前些天有位小伙伴告诉我说 git 改了某个重要文件的换行符,导致文件的哈希变了,于是文件校验出现错误.之前一直没问题而最近才有问题是因为最近换了部署服务器,git 的换行符配置不一样. 其实,我们不应 ...

  2. poi生成excel时换行符(\n)只有鼠标双击才会生效,设置列宽度不生效

    1.poi生成excel时换行符(\n)只有鼠标双击才会生效 解决:样式中打开自动换行style.setWrapText(true); 2.设置列宽度不生效sheet.setDefaultColumn ...

  3. textarea赋值时换行符无效的解决方法

    textarea赋值时换行符无效的解决方法 参考文章: (1)textarea赋值时换行符无效的解决方法 (2)https://www.cnblogs.com/liuzhibin/p/9345632. ...

  4. windows git 更改为unix模式换行符决解方法

    背景 在各操作系统下,文本文件所使用的换行符是不一样的.UNIX/Linux 使用的是 0x0A(LF),但 DOS/Windows 一直使用 0x0D0A(CRLF)作为换行符. 问题 需要把再Wi ...

  5. textarea中的内容保存与显示时换行符的处理方法

    一.基本知识 textarea中,换行符是/r/n,而html中换行符是<br/>. 如果要把textarea中填写的内容显示在页面上,需要在最终显示到页面上时将/r/n替换成<br ...

  6. linux系统下回车换行符

    简述 回车换行符在文本文件的读写中经常用到,windows下面稍微复杂点,linux系统下更为简单. 详述 回车和换行是两个不同的概念. 回车,就是告诉计算机把头定位在左边界:换行,就是把头向下移动一 ...

  7. idea设置了默认换行符,ctl + s 保存文件时换行符没有变成默认换行符 解决方法

    设置默认换行符 首先我们在idea的设置中,设置默认的换行符. 因为linux 和 windows 以及 macos 各个操作系统的换行符不一致,根据自己的需求进行选择 快捷替换 在idea的右下角可 ...

  8. git clone 使用源仓库换行符风格

    RT git config --global core.autocrlf input

  9. html导出excel时换行符,ASP.NET 导出到Excel时保留换行的代码

    完整代码: protected void Button1_Click(object sender, EventArgs e) { System.Web.HttpContext curContext = ...

最新文章

  1. 你应该使用Java8 非阻塞异步API来优化你的系统了
  2. 懒到极致之怒撸一键打包发布系统
  3. 【干货】实用案例|产品设计中的恰到好处
  4. 大数据互联网架构阶段 Spring框架导致的406错误
  5. NetBeans 7.4的本机Java打包
  6. Codewars-Regex validate PIN code(正则检验PIN码)
  7. secureCRT使用退格键(backspace)出现^H解决的方法
  8. 计算机公开课推荐 2019.8
  9. linux下调整交换分区的大小
  10. python实现卷积操作
  11. 提高linux运行速度,教你如何提高Linux操作系统的运行速度
  12. 机器学习数学基础- gradient descent算法(上)
  13. C++代码实现栈基本操作
  14. Android App跳转微信小程序教程
  15. Solidity 系列教程
  16. kali安装火狐浏览器
  17. 一元云购系统接入短信功能问题汇总
  18. 1506.01186-Cyclical Learning Rates for Training Neural Networks
  19. POJ 1625 Censored!
  20. 2018-06-27 关于小米电力猫小猫一直黄灯闪烁不匹配的问题

热门文章

  1. python中 将字符串和字典的相互转换
  2. Wide character in print at ../lib/MonWalkProc.pm line 569.
  3. PERL 使用IO::Socket::INET模块实现socket编程
  4. Beanstalkd消息队列的安装与使用
  5. 3.07 检测两个表中是否有相同的数据
  6. 《SPSS 统计分析从入门到精通(第2版)》一6.3 二项式检验
  7. 腾讯 2016 春季实习校招二面回忆(C++后台)
  8. OpenMP并行加速笛卡尔乘积
  9. 二路归并排序简介及其并行化
  10. java基础知识简化