除非我签上演变化的地方,并重新编译和重新测试(不太富有成效的做法在我看来)
这是非常有成效的。它被称为"continuous integration testing"或CI。这被认为是最佳做法。 CI服务器可以免费找到这些日子,包括TravisCI,GitLab CI和AppVeyor用于Windows测试。
CI确保代码的干净副本在干净的环境中进行测试。这会产生你提到的那些问题,忘记提交一些东西,以及其他许多问题。它还避免了基于特定开发机器的任何假设,如您忘记声明的任何依赖关系。
CI可以运行用户可能遇到的操作系统,编译器和依赖关系的各种组合。它还使得捐助和接受捐款变得更加容易,因为CI服务器确保这些捐款经过测试。
而且,也许最重要的是,它确保测试运行。人们有时会忘记,或者变得懒惰。
我在一个项目上工作,并在许多文件中的更改。有些我打算提交,有些可能只是在调试过程中临时使用(例如跟踪语句)。
你想要它,以便当你运行git status
什么它说要上演。那么就没有必要仔细检查git status
来找出什么是和不要上演。这大大减少了丢失东西的机会(或者意外提交了某些东西)。
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
首先是要明智地使用.gitignore
忽略不属于被提交的任何文件。这包括构建工件和本地配置文件。
其次是避免习惯性地从承诺提交手写的调试语句。它真的是很容易意外提交它们,其他开发人员不会从中受益。相反,使用调试标志并将它们放入。根据需要翻转调试标志。
这使我想到,也许我应该编译和测试只上演的内容,它会更容易些,如果这样做等于工作副本本身。但未跟踪文件的问题仍然存在。
这是一个好主意。你可以通过stashing your changes来完成。存储是存储正在进行的工作的一个小小的地方,有点像保存补丁文件。基本的工作流程是...
# Save all changes except what is staged
$ git stash save -ku
...do your testing on the staged change...
# If it worked, commit the change.
$ git commit
# Restore your unstaged changes and untracked files.
$ git stash pop
-k
说保持任何已经上演。 -u
表示存储未跟踪的文件。
一般来说,任何需要所有人都小心的过程将会失败。持续集成意味着您不能忘记运行测试,或在特定环境中运行测试。保持你的工作目录清洁意味着人们不必仔细检查要登台或不登台,他们可以习惯性地把所有东西都展示出来。人们可以拨打git add .
和git commit -a
,并合理确定它是正确的。
您可以使用'git stash'删除所有临时工作(使用'git stash apply'进行恢复)。留下未跟踪文件的问题,但是... – knittl
@knittl查看'git stash save -u'。 – Schwern