最近我决定提高我的Python技能并开始解决Project Euler问题;另外,我想在这个项目中习惯使用git作为独奏用户。
这是我想用git实现的东西:
在我的project_euler
文件夹中,我有名为001.py
的Python文件等等,所以只是问题编号。正在“处理”的那些文件位于主文件夹中,一旦我更改了一些重要内容(但不一定能解决问题),我就会提交它们。
有两个子文件夹,working_solutions
和optimized_solutions
。我会在文件工作后立即复制文件,即给出正确的解决方案 - 之后我希望有机会给我的实现提供一些想法,然后最终将优化的解决方案复制到后者中。
现在我想保留并比较解决方案的不同实现,而不必重命名文件001_algorithm1.py
,001_algorithm2.py
等等 - 这对我来说似乎有点不对(毕竟,git应该采取照顾那些东西)。
另一方面,提交一个版本,尝试其他东西,然后提交第二个版本似乎是git方式 - 但这意味着每当我想比较时间时,例如,我必须在两个版本之间切换通过还原和提交,因为我没有本地可用的两种(或所有)不同的实现。
此设置是否正确分叉,但只有单个文件?
使用git时,上面提到的文件夹结构是否有意义?
我应该恰当地重命名文件,add
并提交它们吗?
答案 0 :(得分:1)
如何使用git分支?您可以根据模式// using static System.IO.Directory;
SetCurrentDirectory(@"C:\Path\To");
ITypeLib typeLib = LoadTypeLibEx("C:\Path\To\Bar.tlb", REGKIND.REGKIND_NONE);
命名分支,例如$problemNumber-$algoNumber
,001_algo1
等,然后当您想要比较两种方法时,您将执行以下操作:
001-algo2
所以步骤是:
git diff 001_algo1..001_algo2 -- optimized_solutions/001.py
检查以下内容是否有效(至少在OSX上):
# Let's assume that you are on master branch and that optimized_solution does not have any solutions for problem 001
# (This creates and switches to that branch and is a combination of git branch 001_algo1 and git checkout 001_algo1)
git checkout -b 001_algo1
# Let's assume you have made your changes to the uber 001.py containing the solutions for problem 001 using algo1
git add optimized_solutions/001.py
git commit -m "Solutions for Prob 001 using algo1"
# Now switch to master and create the branch for the next algo
git checkout master
git checkout -b 001_algo2
# Make changes and commit
git add optimized_solutions/001.py
git commit -m "Solutions for Prob 001 using algo2"
# And finally when you want to compare
git diff 001_algo1..001_algo2 -- optimized_solutions/001.py
(请注意,在第二个命令中,只有在使用zsh时才需要some-git-repo - [master] » time python ./ex1.py
Hello World!
./ex1.py 0.01s user 0.01s system 87% cpu 0.019 total
some-git-repo - [master] » git show 001_algo2:ex1.py >! temp.py && time python ./temp.py
Hello World in a branch!!
python ./temp.py 0.01s user 0.01s system 87% cpu 0.020 total
,默认情况下,zsh设置为不破坏现有文件)