shell脚本整理git修改前后

    之前用svn,图形化界面,可以很容易导出修改前后,以文件的形式。然后用beycond compare进行对比,很好用。

 

使用git没发导出修改前后,只能看diff文件,显示不全。

所以制作了一个shell脚本,不是太完善,还能用。

使用方法:

1、修改DIR为想要DIR为修改前后存放的地方,修改head_hash为git log最后的hash

2、把源码文件存为commit_befor_after.sh放到可以执行git命令的地方,然后执行

./commit_befor_after.sh hash1_before hash2_after

其中hash1_before是修改前的hash,hash2_after是修改后的hash。

执行完毕后在~/commit_befor_after下就可以看到修改前后。

另外会在当前文件夹下产生list.txt文件,里面存放的是修改文件清单。

3、源码如下,根据需要可以自己修改。

#!/bin/sh
DIR=~/commit_befor_after
head_hash=XXXXXXXXXX

echo The before hash:"$1"
echo The after  hash:"$2"

rm ${DIR}/before/ -rf
rm ${DIR}/after/ -rf
mkdir -p ${DIR}/before/
mkdir -p ${DIR}/after/

echo git diff --name-status "$1" "$2"
cmd1=$(echo git diff --name-status "$1" "$2")
$cmd1| awk '{print $2}' > list.txt

filelist=$(cat list.txt)
echo $filelist
echo

 echo ----------work begin------------------------------------
 echo git reset "$2" begin
 git reset "$2" --hard
 
 for file in $filelist
do
 echo cp --parents ${file} ${DIR}/after/
 cp --parents ${file} ${DIR}/after/  
done

echo  
 echo git reset "$1"
 git reset "$1" --hard
 
for file in $filelist
do
 echo cp --parents ${file} ${DIR}/before/
 cp --parents ${file} ${DIR}/before/
done

 echo
 echo git reset--hard HEAD
 git reset $head_hash --hard
 echo ----------work end-------------------------------------

更新代码:

#!/bin/sh

DIR=~/git_before_after



echo The before hash:"$1"

echo The after  hash:"$2"



rm ${DIR}/before/ -rf

rm ${DIR}/after/ -rf

mkdir -p ${DIR}/before/

mkdir -p ${DIR}/after/



echo git diff --name-status "$1" "$2"

cmd1=$(echo git diff --name-status "$1" "$2")

$cmd1| awk '{print $2}' > ${DIR}/modifyFileList.txt



filelist=$(cat ${DIR}/modifyFileList.txt)

echo $filelist

echo



 echo ----------work begin------------------------------------

 echo git checkout "$2"

 git checkout "$2"

 

 for file in $filelist

do

 echo cp --parents ${file} ${DIR}/after/

 cp --parents ${file} ${DIR}/after/  

done



echo  

 echo git checkout "$1"

 git checkout "$1"

 

for file in $filelist

do

 echo cp --parents ${file} ${DIR}/before/

 cp --parents ${file} ${DIR}/before/

done



 echo

 echo git checkout master

 git checkout master

 echo ----------work end-------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Git指令的Shell脚本,能够快速便捷地管理Git库,包括添加修改、提交修改、显示库状态、推送到远程库、从远程库更新到本地、版本恢复等操作。 使用方法: 1. 在Linux系统中,将本文件放在Git库目录下,利用Shell运行本文件; 2.在windows系统中,需下载安装与操作系统相对应的Git软件,并将本文件放在Git库目录下,双击即可运行。 运行示例: Please choose the first letter of options. [Add|Commit|Diff|Fetch|Exit|Help|Log|Push|User|Reset|Status]? h A: Add all changes to repository. C: Commit all changes to repository. D: Show differences between current version with HEAD->. E: Exit shell script. F: Fetch origin/master and merge. L: Show latest two-weeks logs of repository. P: Push commissions to origin/master. U: User command mode(Press ‘Enter’ to exit). R: Reset current version according version_id. S: Show status of repository. Please choose the first letter of options. [Add|Commit|Diff|Fetch|Exit|Help|Log|Push|User|Reset|Status]? s On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: Git.sh modified: PyNote/PyNote_2.md no changes added to commit (use "git add" and/or "git commit -a") Please choose the first letter of options. [Add|Commit|Diff|Fetch|Exit|Help|Log|Push|User|Reset|Status]? a On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD ..." to unstage) modified: Git.sh modified: PyNote/PyNote_2.md
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值