今天跑程序时,遇到了一个困境:当时我开启了一个进程1运行一个Git分支br1上的python程序,该进程处于长时间运行状态;同时,我有了一个新想法,便想新建一个分支br2实现想法,并运行测试;这时,我心生担忧,是否切换分支并修改程序再开一个进程2运行时会影响进程1?
针对上述问题,我首先做了一个简单的测试,发现:当先在Git的一个分支br1上开进程1运行代码test.py,然后切换到分支br2再开一个进程2运行有修改的test.py时,两个进程可以同时正常运行。
随后经过上网搜索了解到,python在运行程序时,会先将.py文件编译成PyCodeObject存于内存,再解释执行(参考1)。所以如上测试中两个进程可以正常工作,进程1不会因为切换分支后test.py文件发生更改而随之更改。但是,python程序在运行时如果发生错误中断,程序会根据堆栈信息跟踪到错误行号n,进而打印.py文件中行号n对应内容到错误输出(参考2)。因此,在上述测试中,如果仍处于分支br2时,进程1因运行时错误中断,程序会跟踪到错误行号n,该行号正确对应的内容应该为分支br1下test.py中行号n的内容,而此时处于分支br2,程序会打印当前分支下test.py中行号n的内容到错误输出,由此会发生混淆,不利于解决错误。如果要根据错误行号查找正确对应的.py文件中内容,则需要重新切换回相应分支,使得操作繁琐。
进一步搜索发现了一种合适的解决方案,即使用Git的worktree功能,可以将任意分支br从当前路径/path/to/myrepo 剥离到另一个指定路径/path/to/br下,但不产生新的git版本库,在路径/path/to/br下工作等效于在分支br中工作(参考3)。这样便可互不影响的在不同目录中同时运行不同版本的程序。如此便避免了重复clone同一个repo并频繁同步的繁琐,或反复切换分支的窘迫。
巧用Git来提升我们的工作效率吧。
领取专属 10元无门槛券
私享最新 技术干货