iT邦幫忙

0

[求救]使用SVN設定於關機前commit檔案

各位大大們好

小弟是屬於幫公司打雜的人員,頂多對DOS的指令稍微了解
由於老闆說需要弄台伺服器(可能NAS?)把一些會計資料全部弄上去(會計有兩位)
這裡是有想要在會計電腦上使用SVN做版本管理

但鑑於沒辦法要求會計對於SVN的commit能夠熟練(雖然也就只是按個右鍵,輸入更改內容就提交…)
所以能夠做的就只能由小弟這裡做好

目前有搜尋一些文章看SVN的使用方式
不過目前先以撰寫bat檔,然後在自動關機前執行此bat檔案
內容如下

@echo off
rem 显示部分
@echo 
@echo             注 意 事 项
@echo ************************************************************************
@echo 可以精简并通过计划任务来制定自动执行,运行前请检查下面目录:
@echo.   
@echo     1.svn_bin 为安装TortoiseSVN客户端的可执行程序目录
@echo     2.svn_work 为更新项目文件的目录
@echo.
@echo WIN7或WINVista或WIN2008的用户请用管理员身份运行
@echo 
@echo ************************************************************************

rem 路径变量,请在此处按实际修改,最后面不要带斜杠
@set svn_bin=C:\Program Files\TortoiseSVN\bin
@set svn_work=D:\Workshop
@set server_cfg_file_dir=D:\OneDrive\Workshop

::提交配置文件
"%svn_bin%"\TortoiseProc.exe /command:commit /path:"%svn_work%" /closeonend:1

@echo finish commit
pause

::文件到此结束

這其實算是抄別人的內容,自己稍加修改
主要參考網頁為
https://blog.csdn.net/xiaoheqin/article/details/51259839

但不知為何,兩下點擊卻馬上就消失了
原本想說是不是內容有問題(因為含簡體中文),也把編碼方式改成Unicode
並且以系統管理員身份執行,也是稍縱即逝

後來就直接開啟CMD
輸入了

C:\Program Files\TortoiseSVN>tortoiseproc /command:commit /path:"D:\Workshop" /closeonend:1

https://ithelp.ithome.com.tw/upload/images/20180908/20105484Tjz25ygnUx.png

感覺是已經到了,但是只差最後沒有提交出去啊…(提交出去是最終目的)

所以小弟這邊的目的是

  1. 關機前執行bat(目前搜尋到的資料為使用gpedit.msc)
  2. bat可以直接把svn的資料上傳
  3. commit的註解部分為當日日期即可

-----------------------------2018/9/9內容更新--------------------------------
目前有在海外(日本)的網站找到其中一個功能---自動強制送交
原網址為
https://dh3p7.app.goo.gl/wkiy

這裡解套如下:
1.在安裝Tortoise的時候,需要連同「command line client tools」項目一起安裝
2.弄成bat檔的時候,程式碼如下

@echo off
:start
setlocal ENABLEDELAYEDEXPANSION
set TD=%~dp0
cd /d %TD%

:SVN_UPDATE
svn update

:SVN_ADD_NOTUNDERCONTROL
FOR /F "usebackq delims=" %%i IN (`svn status`) DO (
  set LN="%%i"
  set FC=!LN:~1,1!
  set FN=!LN:~9,-1!
  IF "!FC!"=="?" (
    svn add "!FN!"
  )
)

:SVN_COMMIT
set MSG=""
svn commit -m %MSG%

:end

執行這個bat檔之後,的確就達到我所需要的強制自動上傳
因為公司內並無共同作業
使用SVN只是單純的版本回滾(就怕老闆說之前的比較好還是怎樣之類…相信你懂的)
現在就差在自動加入Log訊息

不過我這邊有再思考了一下
其實在這bat檔中

:SVN_COMMIT
set MSG=""
svn commit -m %MSG%

這邊就有可以設定Log訊息
只是還在研究如何將系統時間可以填入到這個項目,這樣就大功告成了

jerry00218 iT邦好手 10 級 ‧ 2018-09-09 00:21:39 檢舉
我覺得光要會計幫你輸入他修改的標的都很困難…
不如直接使用 SVN 的命令直接 Commit 本次修改,連視窗都不用顯示。
rucifa iT邦新手 5 級 ‧ 2018-09-09 10:04:09 檢舉
那麼請問大大這應該怎樣撰寫比較好呢?
小弟對於這個沒有頭緒,不知該從哪裡下手

由於小弟使用的是Windows,目前找的資料大部分都是Unix的樣子
如果方便還請指示,謝謝!

1 個回答

1
froce
iT邦大師 3 級 ‧ 2018-09-08 12:49:28
svn_bin=C:\Program Files\TortoiseSVN\bin

//改成
svn_bin="C:\Program Files\TortoiseSVN\bin"

試試看

看更多先前的回應...收起先前的回應...
rucifa iT邦新手 5 級 ‧ 2018-09-08 17:56:12 檢舉

大大,有嘗試過你的方法
但一樣CMD畫面跳一下就沒了
我也同時把其他路徑的部分都加入""
不過狀況還是一樣就是

rucifa iT邦新手 5 級 ‧ 2018-09-08 18:06:46 檢舉

大大,跟你報告一下我更改的進度
目前算是成功一半

找到的原因是…
編碼一定要ANSI不能是Unicode,否則絕對會馬上閃一下就沒了
找了一下似乎只要撰寫bat檔的話只能用Ansi
那麼我內容剛好有非英文之外的GB編碼(大陸那邊的)
要碼只能強制用Big5格式,不然就是全英文註釋才可以

另外
svn_bin=C:\Program Files\TortoiseSVN\bin
維持原狀即可,不需要再加入""
否則一樣不能執行

rucifa iT邦新手 5 級 ‧ 2018-09-08 18:30:15 檢舉

另外要請教的是,目前這樣的寫法的確是跳出Commit視窗
但是我還希望達成的是

  1. 跳出Commit視窗後,可以在訊息的地方自動填入今天日期
    格式如下:
    20180908_1(第一次關機)
    20180908_2(如被叫回加班必須再開電腦但還在同一日內)

  2. 上述都為自動填入,且需要「強制上傳」
    主要也因為SVN有版本管理概念
    不管內容是否有誤,只要回滾上個版本就好

還請大大指點,謝謝!

rucifa iT邦新手 5 級 ‧ 2018-09-09 14:56:20 檢舉

有點像是自問自答,最終自己找出方法來

批次檔功能如下

  1. 檔案強制上傳
  2. 在記錄訊息裡自動填入「送交的日期、時間」

目前不足的部分
如更新目錄有檔案被刪除的話,是無法被自動更新
原因:
因為在程式碼裡面有加入svn update這段,這段就是會先將遠端的檔案下載到目錄,所以說即使刪除了原檔案,但是跟遠端比較你現在少的這些東西,就又會固定抓下來

但是如果沒有把svn update這段加入,似乎自動送交動作就不能執行

猜測:
可能要在送交前加入一些條件式才有辦法完成,只是現階段來講
這功能還不是很完美,待高手來把這部分補完

下面是小弟完成的部分

@echo off
:start
setlocal ENABLEDELAYEDEXPANSION
set TD=%~dp0
cd /d %TD%
 
:SVN_UPDATE
svn update
 
:SVN_ADD_NOTUNDERCONTROL
FOR /F "usebackq delims=" %%i IN (`svn status`) DO (
  set LN="%%i"
  set FC=!LN:~1,1!
  set FN=!LN:~9,-1!
  IF "!FC!"=="?" (
    svn add "!FN!"
  )
)
 
:SVN_COMMIT
set MSG="%date% %time%"
svn commit -m %MSG%
 
:end

※注意:此批次檔必須放在更新目錄下才能執行

以上

我要發表回答

立即登入回答