dos2unixunix2dos指令在git代码管理中的使⽤
有时候我们在linux下⽤vi或者vim打开⽂件,偶尔在⽂件的每⾏末尾会出现^M,那怎么解决呢?
我们只需要在命令⾏输⼊:dos2unix filename
命令虽有点奇怪,但是也很好记(2->two->to,谐⾳嘛)。
这个dos2unix命令:将DOS格式⽂本⽂件转换成UNIX格式。与之相反的有unix2dos命令。
现在我们先看⼀下dos2unix命令
dos2unix命令⽤来将DOS格式的⽂本⽂件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。
DOS下的⽂本⽂件是以 \r\n 作为断⾏标志的,表⽰成⼗六进制就是0D 0A。
Unix下的⽂本⽂件是以 \n 作为断⾏标志的,表⽰成⼗六进制就是 0A。
DOS格式的⽂本⽂件在Linux底下,⽤较低版本的vi打开时⾏尾会显⽰^M,⽽且很多命令都⽆法很好的处理这种格式的⽂件,如果是个shell脚本。
Unix格式的⽂本⽂件在Windows下⽤Notepad打开时会拼在⼀起显⽰。
因此产⽣了两种格式⽂件相互转换的需求,对应的将UNIX格式⽂本⽂件转成成DOS格式的是unix2dos命令。
常⽤参数
将DOS格式⽂本⽂件转换成Unix格式,最简单的⽤法就是dos2unix直接跟上⽂件名。
格式:dos2unix file
如果⼀次转换多个⽂件,把这些⽂件名直接跟在dos2unix之后。(注:也可以加上-o参数,也可以不加,效果⼀样)
格式:dos2unix file1 file2 file3
格式:dos2unix -o file1 file2 file3
上⾯在转换时,都会直接在原来的⽂件上修改,如果想把转换的结果保存在别的⽂件,⽽源⽂件不变,则可以使⽤-n参数。
git常用指令
格式:dos2unix -n oldfile newfile
如果要保持⽂件时间戳不变,加上-k参数。所以上⾯⼏条命令都是可以加上-k参数来保持⽂件时间戳的。
格式:dos2unix -k file
格式:dos2unix -k file1 file2 file3
格式:dos2unix -k -o file1 file2 file3
格式:dos2unix -k -n oldfile newfile
注:unix2dos命令的使⽤⽅式与dos2unix命令的类似。
与dos2unix相对应的命令有unix2dos,关于unix2dos命令的⽤法在这⾥就不作详细的解释了。
此外,unix2dos命令在我们⽤Git管理代码时也是⽐较常⽤的。
⽐如我们在开发中会常常使⽤到git指令,patch指令相关的⼀些操作。
git diff > filename
patch -p1 < filename 在执⾏此命令之后我们⽤gitk指令查看时会发现与我们预想的结果⼜很⼤的差异,会出现⽆关的代码删除、添加的动作。
这是我们想要的结果:
这是我们执⾏patch -p1 < filename之后实际的结果:
这样我们怎么办呢?unix2dos就起到作⽤了,我们可以把相应打过补丁的⽂件拷到linux下执⾏:
unix2dos file (在这⾥的话就是evt.cpp了),然后把执⾏此指令之后得到的⽂件拷到对应的⽬录下⾯覆盖原来的⽂件就OK了。最后我们再执⾏gitk查看的话,就是我们想要的结果了。
我们也可以使⽤sed指令,理论上是⼀样的,只不过⼩⽩我没尝试过这样
转格式:sed -i 's/^M//g' filename
转格式:sed -i 's/$/^M/g' filename
^M的输⼊⽅式是 Ctrl + v ,然后Ctrl + M

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。