python 关于git下unix和windows换行符不同导致稍微改动一行代码git diff就是全部文件对比的解决方案

背景:

家里的电脑是用来打游戏的,配置也还可以,windows的,偶尔也会用来写写代码。

公司是mac。pycharm的默认配置:Pycharm》Settings》Editor》Code Style》Line separator是Classis Mac,也就是\r,真是尴尬。

导致每一次提交代码,就算是一行代码,git diff也是整个文件的增删。

思路:

谷歌到是换行问题:LR = \n, CRLR = \r\n, CR = \r,跨平台导致之。

其实好解决,就是统一成\n即可。

方案:

1、把pycharm的换行配置改成Unix and OS X(\n) ;

2、git 配置如下:

git config --global core.autocrlf input
这样子git commit的时候,如果我们是CRLF,会报错...如果是CR的话,依旧不会报错,真是可恶。git只能帮我们到这里了吗?

3、写个脚本帮我们把之前被影响的文件修改回来。

这个本来想找现有轮子的,结果无论是doc2unix还是什么别的,都无法解决这个CR换行符也就是\r的问题,CRLF和LF倒是转的挺溜的,无奈自己造轮子:

# coding=utf-8
import os

root = '/Users/ouyang/PycharmProjects/myApp/'
all_cnt = real_cnt = 0

for root, dirs, files in os.walk(root):
    for file in files:
        fullpath = os.path.join(root, file)
        if file.split('.')[-1] == 'py':
            print fullpath
            tmplines = []
            all_cnt += 1
            with open(fullpath, 'r') as infile:
                lines = infile.readlines()
                if len(lines) == 1:  # 如果是CR模式,则读出来的lines只有一行...
                    real_cnt += 1
                    print 'CR MODE!!!'
                    all = lines[0].replace('\r','\n')

                    with open(fullpath, 'w') as outfile:
                        outfile.write(all)
print all_cnt, real_cnt









  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值