我有一些部署脚本可以自动将存储库克隆到本地目录。不幸的是,我还没有找到一个处理更新的好方法,所以我只是事先清除了本地目录。这显然非常浪费。
理想情况下,我需要一系列命令来保证特定的本地目录成为指定仓库/分支的副本,并且所需的数据传输量最小。因此,如果dir已经在正确的repo / branch上,它将只是更新它。如果它在正确的仓库,而不是正确的分支,它将只切换到新的分支。
我确信有一种方法可以通过检查.git中的一些文件并根据找到的内容执行特定操作来实现此目的,但我希望有一种更简单的方法。
一个重要的注意事项是,本地目录中的任何更改都可以随时丢弃。
可能有一个问题已经回答了这个问题,但我找不到合适的措辞来找到它。
答案 0 :(得分:6)
$ git fetch <url> <branch> # get the most up-to-date version of that branch
# (only downloads needed objects)
$ git checkout -f FETCH_HEAD # force the working tree to match fetched branch
请注意,这确实会在回购中留下旧对象。如果您想在任何时候不可逆删除未引用的对象并清理存储库,则可以运行
$ git reflog expire --expire=now --all
$ git gc --prune=now
答案 1 :(得分:0)
一个重要的注意事项是,本地目录中的任何更改都可以随时丢弃。
首先,你需要的是:
git stash
git stash drop
如果目录已经在正确的仓库/分支上
我不确定“正确的回购”是什么意思,但我猜这会涉及检查pwd
对你想要的目录和cd
或其他什么。
然而有趣的部分是分支。使用以下命令:
__git_ps1 "%s"
你在当前存储库中获取当前的git分支(如果它不是git存储库,则没有任何内容)。在合并过程中还有.git文件夹,裸存储库的特殊输出。
然后,您可以使用此命令的输出检查您感兴趣的分支,以了解您是否在正确的分支上。虽然,如果你只是结帐所需的分支,即使你已经在它上面,这也简单得多。