前言
当我们使用git进行代码版本管理时,常常使用指令
git reset <版本号>
跳转到不同的版本,而我们一般是通过指令
git log
获得历次提交的版本号。但是,当我们跳转到较早期的版本后,git log的内容也会随之改变——不会显示该版本之后的内容。常见的做法是使用
git log > <Floder>/<branchname.log>
将最新提交后的log日志保存到 git 文件夹外部的某个文件中。切记这里不能保存在仓库文件夹内部,因为在转化版本时,仓库文件夹中的几乎所有内容都会回到之前的状态,我们保存的.log文件自然也不能幸免。
但是每次保存都要输入一次保存log文件的路径未免有些繁琐,即使是相对路径有时候也会显得太长了。所以,博主这里开发了一个十分简便的半自动化工具用于实现这一过程。
Version 1.0
博主关于Windows批处理文件的了解也有限,暂时只实现了很简单的功能。将此版本命名为1.0,以后还有提升的空间.
工作流程
如图所示,我的所有Java项目都放在eclipse-workspace文件夹下。图中的savelog.bat就是脚本文件,
_log文件夹是保存项目日志的文件夹。
双击savelog.bat,启动脚本。
如上图所示,首先会打印提示当前我们的项目文件都有哪些,然后让我们做出选择选择一个项目保存其log文件。这里我们演示一下选A,
执行完毕后会输出Done。可以看到log日志已经保存好了。
源代码解释
::@author vovohao
::@function 打印目录下的git项目文件,将指定文件的日志保存到本地
@echo off & setlocal
::设置我们需要使用的变量
set promp=Now we have git projects: (a) SocialNetwork, (b) HIT-Lab1-200111028, (c) HIT-Lab2-200111028, (d) HIT-Lab3-200111028
set LOG_FOLDER=_log
set PROJ_FOLDER=
set LOG_FILE=
echo %promp%
choice /c abcd /m "Please choice the project which you want to save log: "
if %errorlevel%==1 (
set PROJ_FOLDER=SocialNetwork
set LOG_FILE=SocialNetwork.log
)
if %errorlevel%==2 (
set PROJ_FOLDER=ComputerScienceHIT/HIT-Lab1-200111028
set LOG_FILE=Lab1.log
)
if %errorlevel%==3 (
set PROJ_FOLDER=ComputerScienceHIT/HIT-Lab2-200111028
set LOG_FILE=Lab2.log
)
if %errorlevel%==4 (
set PROJ_FOLDER=ComputerScienceHIT/HIT-Lab3-200111028
set LOG_FILE=Lab3.log
)
set pre_path=%cd% ::保存当前工作路径
cd %~dp0 ::跳转到脚本文件所在路径
cd %PROJ_FOLDER% ::以相对路径的方式进入待保存项目文件
git log > %~dp0/%LOG_FOLDER%/%LOG_FILE%
echo Done
cd %pre_path% ::回到原路径
pause
这里大概解释一下代码逻辑吧。其实就是通过一系列if else语句找到目标项目的路径和保存文件的路径。
之所以说这是一个半自动化脚本,是因为,每当新创建一个项目的时候,我们都要根据项目信息向脚本中添加内容:)。需添加的内容包括,prompt的提示信息、和新的 else if 语句块。参考格式如上。
这里简单解释一下各个参数的含义:
- LOG_FOLDER 保存log日志的文件夹 相对于脚本文件的相对路径
- PROJ_FOLDER 项目git文件夹相对于脚本文件的相对路径
- LOG_FILE 保存log日志的文件名
最后,博主推荐使用VScode进行.bat文件编辑工作
总结
以上就是本文的分享,希望这个小工具可以给需要管理较多项目的朋友带来一些帮助。也欢迎大家进行二次创作。
改进方向
- 为它添加从文本文件自动读取项目路径和保存文件名的功能。
- 如果还有时间或许可以实现各个分支的日志都保存的功能。