1

我有一些部署脚本可以自动将存储库克隆到本地目录。不幸的是,我还没有找到处理更新的好方法,所以我只是事先清除了本地目录。这显然是非常浪费的。

理想情况下,我想要一系列命令,以保证特定本地目录成为指定 repo/branch 的副本,并且所需的数据传输量最少。因此,如果 dir 已经在正确的 repo/branch 上,它将简单地更新它。如果它在正确的 repo 上,但不在正确的分支上,它只会切换到新的分支。

我确信有一种方法可以通过检查 .git 中的一些文件并根据找到的内容执行特定操作来做到这一点,但我希望有一种更简单的方法。

一个重要的注意事项是本地目录中的任何更改都可以始终被丢弃。

可能已经有一个问题可以回答这个问题,但我无法找到合适的措辞来找到它。

4

2 回答 2

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

Note that this does leave old objects in the repo. If at any point you want to irreversibly delete the unreferenced objects and clean the repository, you can run

$ git reflog expire --expire=now --all
$ git gc --prune=now
于 2012-07-12T15:23:32.207 回答
0

一个重要的注意事项是本地目录中的任何更改都可以始终被丢弃。

所以你需要的第一件事是:

git stash
git stash drop

如果目录已经在正确的仓库/分支上

我不确定您所说的“正确的回购”是什么意思,但我猜这将涉及检查pwd您想要的目录等cd

然而,有趣的部分是分支。使用以下命令:

__git_ps1 "%s"

您在当前存储库中获得了 git 的当前分支(如果不是 git 存储库,则没有)。.git 文件夹、裸存储库、合并中间等也有特殊输出。

然后,您可以使用此命令的输出检查您感兴趣的分支,以了解您是否在正确的分支上。虽然,如果您只是签出所需的分支,即使您已经在它上面,它也会简单得多。

于 2012-07-12T15:30:03.150 回答