开发工具
🎟️

开发工具

Git

git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --global user.email "[email protected]" # 配置邮件 git config --global color.ui true # git status等命令自动着色 git config --global color.status auto git config --global color.diff auto git config --global color.branch auto git config --global color.interactive auto git config --global --unset http.proxy # remove proxy configuration on git git clone git+ssh://[email protected]/VT.git # clone远程仓库 git status # 查看当前版本状态(是否修改) git add xyz # 添加xyz文件至index git add . # 增加当前子目录下所有更改过的文件至index git commit -m 'xxx' # 提交 git commit --amend -m 'xxx' # 合并上一次提交(用于反复修改) git commit -am 'xxx' # 将add和commit合为一步 git rm xxx # 删除index中的文件 git rm -r * # 递归删除 git log # 显示提交日志 git log -1 # 显示1行日志 -n为n行 git log -5 git log --stat # 显示提交日志及相关变动文件 git log -p -m git show dfb02e6e4f2f7b573337763e5c0013802e392818 # 显示某个提交的详细内容 git show dfb02 # 可只用commitid的前几位 git show HEAD # 显示HEAD提交日志 git show HEAD^ # 显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本 git tag # 显示已存在的tag git tag -a v2.0 -m 'xxx' # 增加v2.0的tag git show v2.0 # 显示v2.0的日志及详细内容 git log v2.0 # 显示v2.0的日志 git diff # 显示所有未添加至index的变更 git diff --cached # 显示所有已添加index但还未commit的变更 git diff HEAD^ # 比较与上一个版本的差异 git diff HEAD -- ./lib # 比较与HEAD版本lib目录的差异 git diff origin/master..master # 比较远程分支master上有本地分支master上没有的 git diff origin/master..master --stat # 只显示差异的文件,不显示具体内容 git remote add origin git+ssh://[email protected]/VT.git # 增加远程定义(用于push/pull/fetch) git branch # 显示本地分支 git branch --contains 50089 # 显示包含提交50089的分支 git branch -a # 显示所有分支 git branch -r # 显示所有原创分支 git branch --merged # 显示所有已合并到当前分支的分支 git branch --no-merged # 显示所有未合并到当前分支的分支 git branch -m master master_copy # 本地分支改名 git checkout -b master_copy # 从当前分支创建新分支master_copy并检出 git checkout -b master master_copy # 上面的完整版 git checkout features/performance # 检出已存在的features/performance分支 git checkout --track hotfixes/BJVEP933 # 检出远程分支hotfixes/BJVEP933并创建本地跟踪分支 git checkout v2.0 # 检出版本v2.0 git checkout -b devel origin/develop # 从远程分支develop创建新本地分支devel并检出 git checkout -- README # 检出head版本的README文件(可用于修改错误回退) git merge origin/master # 合并远程master分支至当前分支 git cherry-pick ff44785404a8e # 合并提交ff44785404a8e的修改 git push origin master # 将当前分支push到远程master分支 git push origin :hotfixes/BJVEP933 # 删除远程仓库的hotfixes/BJVEP933分支 git push --tags # 把所有tag推送到远程仓库 git fetch # 获取所有远程分支(不更新本地分支,另需merge) git fetch --prune # 获取所有原创分支并清除服务器上已删掉的分支 git pull origin master # 获取远程分支master并merge到当前分支 git mv README README2 # 重命名文件README为README2 git reset --hard HEAD # 将当前版本重置为HEAD(通常用于merge失败回退) git rebase git branch -d hotfixes/BJVEP933 # 删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支) git branch -D hotfixes/BJVEP933 # 强制删除分支hotfixes/BJVEP933 git ls-files # 列出git index包含的文件 git show-branch # 图示当前分支历史 git show-branch --all # 图示所有分支历史 git whatchanged # 显示提交历史对应的文件修改 git revert dfb02e6e4f2f7b573337763e5c0013802e392818 # 撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818 git ls-tree HEAD # 内部命令:显示某个git对象 git rev-parse v2.0 # 内部命令:显示某个ref对于的SHA1 HASH git reflog # 显示所有提交,包括孤立节点 git show HEAD@{5} git show master@{yesterday} # 显示master分支昨天的状态 git log --pretty=format:'%h %s' --graph # 图示提交日志 git show HEAD~3 git show -s --pretty=raw 2be7fcb476 git stash # 暂存当前修改,将所有至为HEAD状态 git stash list # 查看所有暂存 git stash show -p stash@{0} # 参考第一次暂存 git stash apply stash@{0} # 应用第一次暂存 git grep "delete from" # 文件中搜索文本“delete from” git grep -e '#define' --and -e SORT_DIRENT git gc git fsck
notion image

小工具

实现一个傻瓜式操作的Gui提交
1、Easygui初始版(未写完)
import datetime import subprocess import sys import easygui as eg def run_git(command=['git', 'status']): try: # 运行git命令 result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) print("Git Status Output:\n", result.stdout) return result.stdout except subprocess.CalledProcessError as e: # 打印命令错误输出 print("Error Output:\n", e.stderr) return e.stderr # 这里解析命令并保存到列表 def explain_git(data): return_data = [i for i in data.split(" ")] return return_data if __name__ == "__main__": # 修改清单 show_data1 = run_git() extract_data = [i.strip("\t") for i in show_data1.split("未跟踪的文件:")[-1].split("\n")[2:-3]] edit_data = [i.strip("\t修改:").replace(" ", '') for i in show_data1.split("尚未暂存以备提交的变更:")[-1].split("未跟踪的文件:")[0].split("\n")[3:-2]] extract_data = extract_data+edit_data while True: runCheck1 = eg.buttonbox(title="数据修改", msg="记得在浅色模式下运行", choices=("查看修改", "提交所有修改", "提交部分修改", "退出")) print(str(datetime.datetime.now()).split(".")[0] + "-->" + runCheck1) if runCheck1 == "查看修改": show_data = run_git() eg.codebox(msg=show_data, title="查看修改") if runCheck1 == "提交所有修改": show_data2 = "" for i in extract_data: show_data2 += i + "\n" # 全部提交 runCheck2 = eg.ynbox(msg="确认全部提交?", choices=["确认", "取消"]) if runCheck2: eg.msgbox(msg="正在提交", title="提交中~", ok_button="确认") if runCheck1 == "提交部分修改": show_data2 = "" for i in extract_data: show_data2 += i + "\n" runCheck3 = eg.multchoicebox(msg=show_data2, choices=extract_data, title="选择要提交的内容") if runCheck3 is None: continue runCheck3_1 = eg.ynbox(msg="确认提交,点击确认后请稍等", title="提交数据", choices=["确认", '取消']) if runCheck3_1: for i in runCheck3: gitAdd = f"git add {i}" run_git(command=explain_git(gitAdd)) commitTime = datetime.datetime.now().strftime("%Y-%m-%d--%H:%M") gitCommit = f"git commit -m '{commitTime}'" run_git(command=explain_git(gitCommit)) gitPush = "git push origin main" run_git(command=explain_git(gitPush)) eg.msgbox(msg="提交成功", title="已提交", ok_button="确认") else: continue if runCheck1 == "退出": sys.exit(0)
2、Tkinter初始版
import subprocess import sys import tkinter as tk def run_git(command): try: print(command) # 运行 git status 命令 result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) # 返回命令输出 return result.stdout except subprocess.CalledProcessError as e: # 返回命令错误输出 return e.stderr def show_git_status(git_command=["git", "status"]): # 隐藏单选按钮和确认按钮 for rb in radio_buttons: rb.pack_forget() button.pack_forget() # 运行 git status 命令并显示结果 git_data = run_git(command=git_command) if git_data is None: git_data = "空" result_label.config(text=git_data) result_label.pack(pady=20) # 显示返回按钮 return_button.pack(pady=20) def on_return_click(): # 隐藏结果标签和返回按钮 result_label.pack_forget() return_button.pack_forget() # 显示单选按钮和确认按钮 for rb in radio_buttons: rb.pack(anchor=tk.W) button.pack(pady=20) def on_button_click(): selected_option = radio_var.get() label.config(text=f"当前选择: {selected_option}") print(f"当前选择: {selected_option}") if selected_option == "退出": sys.exit(0) if selected_option == "查询修改": show_git_status() # 可以在这里添加其他选项的功能 # elif selected_option == "提交修改": # pass # elif selected_option == "提交部分": # pass root = tk.Tk() root.title("标签和按钮示例") root.geometry("600x500") label = tk.Label(root, text="进入小工具") label.pack(pady=20) button = tk.Button(root, text="确认", command=on_button_click) button.pack(pady=20) # 添加单选按钮 radio_var = tk.StringVar() radio_var.set("查询修改") options = ["查询修改", "提交修改", "提交部分", "退出"] radio_buttons = [] for option in options: radio_button = tk.Radiobutton(root, text=option, variable=radio_var, value=option) radio_button.pack(anchor=tk.W) radio_buttons.append(radio_button) # 添加用于显示结果的标签 result_label = tk.Label(root, text="", justify="left") # 添加返回按钮 return_button = tk.Button(root, text="返回", command=on_return_click) root.mainloop()