免责声明:我使用Git已经有一段时间了,但仍然觉得很困惑。
我正在为一个项目设置一个构建过程,在更新git存储库时遇到了问题。
- 我在服务器上创建了存储库,比如说C:\MyProject
- 我用SourceTree将我的计算机连接到存储库。拉一拉,获取我所有的代码,到目前为止一切都很好
- 我去提交,但收到一个错误:"拒绝更新已签出的分支…默认情况下,拒绝更新非裸存储库中的当前分支"
- 使用谷歌一点,我意识到服务器上的git存储库不应该有master签出,所以我使用git GUI签出,使用"从本地分支分离"选项。这将服务器上的分支设置为HEAD
现在是我感到困惑的部分(让我知道我之前是否真的感到困惑,只是不知道)。在服务器上更新代码的建议方法是什么?如果我在GitGUI中打开服务器存储库,就没有进行提取的选项。如果我是结账大师,似乎有效,但这真的是推荐的吗?如果是的话,那就意味着我必须在每次更新后签出一个不同的分支,这样我才能继续在我的工作电脑上推送。
推送到裸repo是一种最佳实践:请参阅"git中裸共享存储库的概念"和所有关于"裸"repo的内容——什么、为什么以及如何修复非裸推送。
这意味着在你的服务器上,你需要:
- 创建一个Git回购(你已经做了)
- 回购裸回购的克隆(
git clone --bare yourProjectFolder yourProjectFolder.git
)
(.git
扩展名是裸存储根文件夹的命名约定) -
转而推动裸回购:
转到您的本地回购,然后键入:git remote set-url origin /url/repo/repo/yourProjectFolder.git
-
在裸repo(在服务器上,
yourProjectFolder.git/hooks/post-receive
)中添加一个钩子,在其中- 更改目录(到非裸机repo文件夹
yourProjectFolder
) unset GIT_DIR
git pull ../yourProjectFolder.git
- 更改目录(到非裸机repo文件夹
请参阅"Remote nodejs server deployment with forever"。