2009-11-03 58 views

回答

3

編輯:這個答案是關於如何更改日誌中的作者,而不是如何設置默認作者。我將把解決方案留在這裏,因爲它可以幫助撤消過去的幾次提交,如果作者不是正確的。

編輯2:鉤子腳本示例和.bat文件的信息。


你不給太多細節,所以我們不得不猜測,我首先想到的是關於那個叫以確認更改的鉤子腳本。在這種情況下,您的客戶端不是問題,這是服務器配置問題。

確保服務器可以執行修訂前更改鉤子腳本(位於服務器的<repository>/hooks目錄中),並允許更改作者。

這裏是C的一個例子:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
int i; 
char *repos = argv[1]; 
char *rev = argv[2]; 
char *user = argv[3]; 
char *propname = argv[4]; 
char *action = argv[5]; 

if (!strcmp(action, "M") && !strcmp(propname, "svn:log")) return 0; 
if (!strcmp(action, "M") && !strcmp(propname, "svn:author")) return 0; 
fprintf(stderr, "Changing revision properties other than svn:log or svn:author is prohibited"); 
return 1; 
} 

如果你的SVN服務器是在Linux上,你也可以簡單地重命名pre-revprop-change.tmpl文件,該文件會自動與每個存儲庫pre-revprop-change創建,並給它一個可執行權限服務器。它應該是這樣的,讓作者和日誌的變化:

#!/bin/sh 

REPOS="$1" 
REV="$2" 
USER="$3" 
PROPNAME="$4" 
ACTION="$5" 

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:author" ]; then exit 0; fi 
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi 

echo "Changing revision properties other than svn:log or svn:author is prohibited" >&2 
exit 1 

對於Windows:

@echo off 
REM pre-revprop-change.bat hook script 
if "%4" == "svn:log" exit /b 0 
if "%4" == "svn:author" exit /b 0 
echo "Changing revision properties %4% is prohibited" >&2 
exit /b 1 

,如果它不能正常工作,這可能是由於COMSPEC或不具有適當的PATH變量服務器帳戶的值,或者它也可以是鉤子腳本的權限。檢查這link for more details

還有其他鉤子腳本示例at CollabNet

有關Version Control with Subversion在線圖書和here(查看下一節)的更多詳細信息。

+0

@RedGlyph:我的存儲庫是在Windows XP上,我在本地主機上使用SVN。 – RKh 2009-11-03 12:54:25

+0

然後最簡單的方法是編譯C代碼並檢查安全權限以確保服務器帳戶可以執行它。如果你使用Cygwin進行編譯,請確保使用'-mno-cygwin'不要依賴任何Cygwin .dll庫。您可以使用.bat腳本,但安裝起來並不容易(請參閱:http://stackoverflow.com/questions/1620490/post-commit-hook-run-as-what-user-in-svn)。 – RedGlyph 2009-11-03 13:01:12

+0

@RedGlyph:沒有任何簡單的SVN命令可以從命令行執行。 – RKh 2009-11-04 03:30:26

3

對於Eclipse(但應與基於Eclipse的IDE喜歡的Aptana工作):

SVN Repository意見SVN Perpective的,只是去 Location Properties所需的存儲庫,並更改Authentication箱的憑據。

它應該從現在開始改變你的作者。

如果你想重寫歷史,你必須使用像RedGlyph的解決方案。

+0

哎呀,對。恐怕我誤解了這個問題,我刪除了我的OT解決方案;-) – RedGlyph 2009-11-03 11:06:01

+0

@Steve:謝謝。實際上,我發現Aptana Subversive插件中有一個「覆蓋」選項來覆蓋默認名稱。它的工作原理,但我現在得到錯誤: SVN:'設置修訂作者'操作完成時出現錯誤:已禁用的存儲庫功能 svn:存儲庫尚未啓用接受修訂的propchanges; 要求管理員創建pre revprop-更改掛鉤 已禁用的存儲庫功能 svn:存儲庫尚未啓用以接受修訂版本更改; 要求管理員創建pre-revprop-change鉤子 – RKh 2009-11-03 11:22:12

+0

@Rohit:這就是我所說的*重寫歷史記錄*。 'override'選項是在提交後(即重寫)嘗試更新作者**的內容。爲此,你必須使用鉤子。 – 2009-11-03 11:28:45

0

Subversion 1.4.x只有svn:log允許默認pre-revprop-change文件。這在使用帶有Subversive svn插件的Eclipse時可能會導致問題。

爲了解決神奇的錯誤,指出

Changing revision properties other than svn:log is prohibited

後SVN命令。爲了解決這個特殊的問題,添加

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:author" ]; then exit 0; fi 

從上面的RedGlyph解決方案。