[英]svn update not working in post commit
我正在嘗試實現提交后掛鈎以更新工作副本。 據我所知,post commit掛鈎正在運行(我在文件中寫了一些東西來驗證它),但是update命令沒有運行。
起初我做了
cd /home/user/working/copy
svn update
但這沒有用,然后我讀到你必須給出svn的完整路徑:
cd /home/user/working/copy
/usr/bin/svn update
但仍然無法正常工作。
我將權限更改為777,並在一個空環境中運行了該腳本...並且它可以正常工作。
#!/bin/bash /usr/bin/svn update /home/user/working/copy
上面的代碼應作為提交后的掛鈎。
如果需要,添加--username和--password選項。
編輯:
看到 http://subversion.tigris.org/faq.html#website-auto-update
執行提交(svnserve或apache)的服務器程序與將運行提交后鈎子腳本的程序相同。 這意味着該程序必須具有適當的權限才能更新工作副本。
如果需要更新的“工作副本”由同一用戶擁有,那么您不必擔心用戶名和密碼。
Subversion FAQ建議將Setuid與以下C程序一起使用。
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/",
(const char *) NULL);
return(EXIT_FAILURE);
}
我也遇到了同樣的問題,並嘗試了所有方法(包括官方常見問題中的一種方法),但沒有運氣
當然,我也根據需要每次都運行chmod -R和chown -R www-data:www-data。
在大多數情況下,將執行更新命令,沒有權限錯誤,沒有任何其他錯誤消息,但是不會更新工作副本。
最后,以下步驟對我來說很有效:
在提交后的鈎子運行中
export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/] # heading tail slash
/usr/bin/svn checkout [source path]
一次,然后將提交后的鈎子更新為
export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/]
/usr/bin/svn update
現在它正在工作,我太累了,無法找到根本原因。 全天都在“ svn更新”上
如果你不自己使用workingcopy,可以chown將此workingcopy用戶運行於鈎腳本
此腳本更好,因為它僅更新必需的文件... http://vidax.net/blog/zh/2010/03/subversion-post-commit-hook/
我得到的最終解決方案是將我得到的一些答案混合在一起。 我的服務器以無人運行的apache身份運行,因此我將工作副本歸任何人所有,並屬於UserName組,然后將其chmod更改為775。這樣,掛鈎將起作用,用戶名也將具有通過FTP更新文件的權限。
wcoenen的答案肯定是正確的。 解決此問題的最簡單方法是將SVN用戶添加到您的組中。 假設您的提交后掛鈎由用戶someUser和組someUser擁有。 將SVN服務器添加到someUser組,並將提交后的鈎子腳本更改為可組執行的,將解決您的問題。
我希望這是有道理的:P
我相信提交后實際上是在提交可見之前運行的。 很奇怪,但是說您提交了修訂版30。提交后仍會將29視為最新修訂版。 提交后腳本完成后,您將看到30作為主要修訂版本。
我可能是錯的。 嚴格來說,這是從內存中獲取的。 至少要嘗試一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.