我想将我的文件直接推送到我的Web服务器.我添加了服务器testing并尝试了
git push testing
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误.制作裸存储库的解决方案可行但我希望自动检出文件.我找到了这个脚本,但没有改变任何东西.
我可以在第三个裸存储库上传输更改,但这只需要很长时间:
client:
git commit -m "test" -a
git push origin
<password>
server:
git pull origin/master
Run Code Online (Sandbox Code Playgroud)
更新(2)
我在服务器上创建了一个新分支git branch testing.
同样在服务器上我创建.git/hooks/post-update了一个添加的:
echo "a" >> /home/pi/log
git update-server-info
git stash
git merge testing >> /home/pi/log
Run Code Online (Sandbox Code Playgroud)
在我运行的客户端上
git push testing HEAD:testing
Run Code Online (Sandbox Code Playgroud)
现在我的/home/pi/log包含:
a
Updating ae2f44b..04753a9
Fast-forward
application/views/main/index.php | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
Run Code Online (Sandbox Code Playgroud)
但文件没有改变.还有什么可能是错的?
您现在如何“推送到部署”(git 2.4,2015 年 5 月),它改进了“推送到结账”(Git 2.3,2015 年 2 月)。
有关具体示例,请参阅“使用 Git push 部署项目”。
简而言之,您可以直接推送到已检出的分支(有警告)。
见提交 4d7a5ce
更新:在 Git 2.30(2021 年第一季度)中,您现在有一个示例“ push-to-checkout”钩子,其执行与内置默认操作相同的操作。
请参阅Adam Spiers ( ) 的提交 e632c46(2020 年 10 月 15 日)。(由Junio C Hamano合并-- --在df7f850 提交中,2020 年 11 月 2 日)aspiers
gitster
hook:添加示例模板push-to-checkout签字人:亚当·斯皮尔斯
该模板或多或少是对 C 代码 shell 的精确转换,用于在
push_to_deploy()函数中定义的 git 推送到结账钩子的默认行为,builtin/receive-pack.c作为修改的方便起点。它还包含从 git-config(1) 和 githooks(5) 手册页中提取的相关文本。
那是:
在 git push 上更新检出树的示例钩子脚本。
该钩子被调用
git-receive-pack时,它发生反应git push,并在其储存库的更新参考(多个),并且当推尝试更新分支当前检出和receive.denyCurrentBranch配置变量被设定为updateInstead。默认情况下,如果远程存储库的工作树和索引与当前检出的提交有任何差异,则拒绝这种推送;当工作树和索引都与当前提交匹配时,它们会更新以匹配新推送的分支尖端。
此钩子用于覆盖默认行为;然而,下面的代码重新实现了默认行为,作为方便修改的起点。
钩子接收将更新当前分支的提示的提交:
Run Code Online (Sandbox Code Playgroud)commit=$1它可以以非零状态退出以拒绝推送(这样做时,它不得修改索引或工作树)。
Run Code Online (Sandbox Code Playgroud)die () { echo >&2 "$*" exit 1 }或者它可以对工作树和索引进行任何必要的更改,以在当前分支的尖端更新为新提交时将它们带到所需的状态,并以零状态退出。
例如,钩子可以简单地运行
git read-tree -u -m HEAD "$1"以模拟git fetch以相反方向运行的git push,因为 的二叉树形式git read-tree -u -m本质上与git switch或git checkout切换分支同时保持工作树中不干扰的本地更改与分支之间的差异。下面是一个更或多或少准确翻译为GIT中的壳的默认行为的C代码
push-to-checkout中所定义的钩push_to_deploy()在功能builtin/receive-pack.c。请注意,挂钩将从存储库目录中执行,而不是从工作树中执行,因此如果您想在工作树上执行操作,则必须相应地调整您的代码,例如通过添加“
cd ..”或使用相对路径。