2009-11-13 99 views
7

我必須對我的項目文件進行本地更改才能使其在不同的環境中運行。兩次,我不小心檢查了這些更改(並且弄亂了其他人的運行環境)。如何避免檢查SVN存儲庫的本地更改?

可能有很多更好的方法來建立我們的構建,但是因爲我作爲一個建立項目的顧問工作,我不能真正改變客戶的工作方式。

我已經嘗試在同一個存儲庫中建立第二個分支(這會導致在其存儲庫的根目錄中複製整個樹 - 我不會再對此進行混淆)。

試圖設置我自己的第二個存儲庫,並只檢查這些文件到新的存儲庫。這真的很混亂,基本上沒有工作。

我正在考慮SVK - 它看起來能夠幫助,但我不能完全弄清楚一個可行的模式。

我想我甚至在這裏發佈並沒有得到一個很好的答案,但那是在我認真考慮SVK之前 - 我認爲這個新參數可能有更好的解決方案。

我意識到我可以跟蹤我想要檢查的變化,然後只檢查那些變化,但這是一個人類依賴和越野車過程,迄今爲止,我失敗了兩次(因爲我是一個越野車的人)。

關於如何做到這一點的任何建議?

+0

我個人有兩個代碼文件夾:一個代碼和一個與存儲庫同步的代碼。但是這需要在提交之前進行手動合併。我想知道是否有更好的方法,所以+1。 – 2009-11-13 22:48:53

回答

7

你使用什麼客戶端?

TortoiseSVN有一個漂亮的功能,利用SVN中內置的changelist功能。如果右鍵單擊修改的文件夾並選擇「檢查修改」,則可以右鍵單擊該對話框中的任何修改文件,然後選擇「添加到更改列表 - >忽略提交。」。從此,無論何時執行提交,Tortoise都確保不將這些文件添加到提交中。請參閱this page的「從提交列表中排除項目」。

如果您不使用烏龜,可以手動設置類似的更改列表。

+0

這似乎是一個很好的解決方案,但我認爲更改列表是作爲父目錄的元數據的一部分簽入的。這意味着每個人都會忽略它(這很糟糕)。我錯了,更改列表是本地的嗎? – 2009-11-13 22:56:39

+0

「我錯了,更改列表是本地的嗎?」是的。藉助SVN,它只是一個工具,可以將您的本地更改按文件粒度分組。它沒有簽入。(我也使用「忽略提交」一個,並且即將提出相同的建議。) – sbi 2009-11-13 23:00:17

+0

太棒了!這看起來幾乎完美 - 我正在做它,當我試圖不檢查新文件或目錄時,它不會給我這個選項。還有另一個竅門嗎? (我可以將這些添加到SVN-IGNORE我認爲,但理論上,這可能會讓客戶感到困惑,因爲它已簽入。) – 2009-11-13 23:05:37

3

你可以使用git-svn。你會得到一個當地的回購協議,你可以在其中獲得當地的歷史記錄,還有幾個機會可以在svn回購之前考慮你的罪行。

+0

我想盡可能地去除人工決策過程,同時減少步驟。這種看起來與你所說的相反。如果有一種模式可以使用git-svn(或svk,它們是不是很相似?),我完全贊同它 - 事實上,這幾乎是我的問題 - 如何使用這樣的系統來從登錄中刪除人員元素。 – 2009-11-13 23:01:11

+0

+1(每日限制,T_T)。我在工作中做。另一個可能的解決方案(這也會減少步驟的數量)將完全清除流程中的svn。 – 2009-11-13 23:09:00

+0

git的值是你得到一個本地分支。你可以編輯你心中的內容,並且不做任何事 - 沒有任何東西會將這些變化回覆到原始回購。 – bmargulies 2009-11-13 23:30:48

0

我想不出任何簡單的方法來做到這一點。是否無法動態檢查(在您的文件/腳本中)您所處的環境,並相應地進行設置?我曾經在PHP中用一個簡單的目錄檢查(如果工作目錄等於C:\ projects ...然後設置路徑...)

另一個選項可能是一個預先提交鉤子,它會排除或恢復更改文件,但在前一種情況下,您不會更新,而在後者中,您必須再次進行更改......嗯。

2

我一般儘量安排事情,所以標準的文件SVN簽出可以由被svn的一個單獨的文件覆蓋:忽略-ED

例如,我有利用其啓動Jetty Web服務器bash腳本一個配置文件。通常它是jetty.xml,但是如果jetty-local.xml存在於文件系統中,那就用它了。 (當然,當jetty.xml得到一些更新時,它們不會被合併到jetty-local.xml中,但這可能不像你已經面對的問題那麼明顯的問題)

在一個我曾經使用過的PHP項目中,我們更進一步使用了兩個獨立的代碼樹 -/system,其中所有的系統類都被檢出,/ local被鏡像,除非是本地班級被添加,在這種情況下,它被優先加載。爲了自己的利益,這可能太過幻想了。

如果是您擁有的配置文件是問題,我使用的另一個解決方案是安排分層讀取它們(即讀入global.cfg.default,然後覆蓋global.cfg.local中的任何設置)。

+0

我希望能夠做到這一點,但它會涉及到構建的變化。這些人太忙了,沒有重構來支持我不記得不檢查配置文件的事實。 – 2009-11-13 22:58:13

1

當我遇到類似情況時,我將不想簽入的文件添加到標籤爲「請勿簽入」的更改集中。我的SVN客戶端(SmartSVN,雖然烏龜也贊同這一點)可以設置爲忽略該變更集,這意味着我不會意外檢查這些變化。

的唯一的缺點是當你已經更改的變更集文件,你真的想檢查 - 你就必須手動記得要檢查他們

0

我有好。使用svn switch來保護個性化文件免於跺腳他人的配置。給定一個正常的中繼/分支/標籤佈局,讓自己在包含您的個性化配置文件的分支中的文件夾。然後

svn switch URL-to-personalized-config URL-to-standard-config 

這將導致配置文件的編輯保存在您的分支而不是中繼。你可以對你的配置文件進行版本編輯,並且不能輕易搞亂中繼文件。

0

解決方案取決於您正在討論的更改數量。我與.net網站合作,所以對於大多數網站我都會爲每個環境配置不同的配置文件。例如:

web.deploy.config 
web.dev.config 

這些都將在源代碼控制之下。然後將這些文件中的一個複製到正在運行的服務器上的web.config(將此文件從源代碼管理中刪除)。適用於我。

0

我總是在提交之前查看所有文件的差異,這樣我就可以確保不會留下一些調試代碼,並且使我有機會再次查看我的更改。

如果你在Unix/Linux機器上運行tksvn安裝w ^/tkdiff,您可以通過一個該用這個命令檢查了每一個DIFF一個不錯的圖形表示:

for FILE in `svn status | grep -v ? | sed -n "s/^[MA]//p"`; do tkdiff $FILE; done 

另一個智能重新檢查自己的方法是檢查一個新的版本庫,並嘗試構建並運行它 - 這樣,如果您忘記添加文件或破壞某些顯而易見的內容,就可以捕獲該文件。

+0

是的,我總是檢查差異。但我已經檢查了這些愚蠢的文件TWICE。我只是想解決這個過程中顯然已經破裂的部分(我) – 2009-11-13 23:22:04

相關問題