2010-10-10 155 views
2

我正在考慮在我的工作中實現源代碼管理。理想情況下,我想使用Subversion,因爲它似乎是目前的首選工具。但是,我似乎碰到了一堵磚牆,因爲對於我們所有的開發人員來說,在當地環境中工作並不實際。我們使用Coldfusion進行網絡開發,並使用共享的開發服務器。對文件所做的更改可以在瀏覽器中快速刷新。共享開發服務器上的Subversion

我們公司擁有超過100個站點,我們的開發服務器鏡像所有這些生產站點。我們經常需要對這100箇中的1個進行快速調整,測試並快速上傳到生產環境。如果我們不得不在本地下載一個給定的網站,在我們的本地網絡服務器上進行設置,這些小的更改將變成耗時的任務。另外,通常撰稿人和技術較差的人會想要進入HTML頁面並更改副本。這在我們當前的共享服務器設置中很簡單。

很久以前,我們使用了一個名爲NGSource的源代碼控制,當您將一個項目簽入存儲庫時,它將文件權限更改爲只讀。我們會將文件檢查到共享的開發者服務器,並且會改變讀取和寫入的權限。我們都會檢查存儲庫,以確保有人不在我們認爲需要處理的文件上工作。這運作良好,可以向撰稿人解釋。問題是NGsource客戶很慢,據我所知,他們可能會停業。

那麼有沒有辦法在簽入和簽出Subversion時實現文件權限的更改?如果沒有,是否有更好的開源解決方案?在共享環境中開發並跳過本地開發是否糟糕?

+0

你能解釋一下你爲什麼需要「只讀「模式的文件?當你描述它時,你可以保存生產站點上的工作副本。因此開發人員或撰稿人只需連接到站點,編輯它並直接從生產站點提交更改。 – Moisei 2010-10-10 11:20:28

+0

哇,你就像是我在整個互聯網上唯一使用NGSource的唯一其他人......我目前正在試圖說服管理層改變像SVN這樣的體面,但這很難: ( – 2010-10-19 10:43:41

回答

1

您可以使用'svn lock'[1]來確保沒有其他人能夠編輯您當前正在處理的文件。

[1] http://svnbook.red-bean.com/en/1.2/svn.ref.svn.c.lock.html

+0

看看鎖定部分,你需要'svn:needs-lock'屬性來完成這個工作。http://svnbook.red-bean.com/en/1.5/svn.advanced.locking.html – msandiford 2010-10-10 12:01:45

+0

謝謝Spong,需求鎖定看起來就像我在找的東西,這聽起來是對的嗎?1.將所有站點文件放入存儲庫,因爲它們在開發服務器上構建,併爲所有文件設置needs-lock = yes。手動將開發服務器文件上的所有權限更改爲只讀。3.當任何開發人員或撰稿人檢出文件並將開發工作副本指向開發服務器時,該文件將更改爲讀/寫,其他人將無法觸摸其他文件,除非他們使用顛覆。是否有issu e與多個svn用戶指向相同的工作副本? – DannyLeavitt 2010-10-10 16:34:22

0

你能解釋一下你爲什麼需要「只讀」模式的文件嗎?正如你所描述的那樣,你可以在生產網站上維護一個工作副本。因此開發人員或撰稿人只需連接到站點,編輯它並直接從生產站點提交更改。

+0

我們有一個我們都在使用的開發服務器,並指向我們的瀏覽器以隨時測試。我們不想直接編輯生產文件。這個想法是所有人都可以從開發服務器上的普通「工作副本」中工作,並且仍然可以使用版本控制。如果所有文件只在被檢出之前才被讀取,則會強制所有人使用版本控制。這就是我想要實現的。 – DannyLeavitt 2010-10-10 16:21:41

+0

只是不這樣做!在開發機器上爲每個開發人員展示一份工作副本。你會遇到權限衝突,只是用你的方法命名一個問題。 – zellus 2010-10-10 21:05:37

0

我是一家開發公司的版本控制管理器,它可以製作和維護Web應用程序和網站,但幾乎不像您的那麼多。我瞭解在100多個網站正常工作(如果有的話)n開發人員/版權所有者的當地信息箱中的複雜性,並且認爲這是一個合法的原因,因爲它們不會在本地簽到。

關於我們的流程

在我們的過程,也就是本地製造的第一個去的地方是對客戶數據的合理表示審覈登臺環境的任何變化,那麼當它被認爲是好的它終於轉移到生產環境。我們不會在生產安裝版本的代碼庫,這是因爲:

  1. 文件系統開銷: SVN保持的東西等同於一個簽出目錄兩次的信息。這就是爲什麼你可以在不連接到服務器的情況下進行區分和還原的原因。
  2. 安全性:擁有額外的.svn目錄只是另一個攻擊向量。這可以得到補償,但收益是否超過成本?對我們來說,不。

相反,我們使用RepliWEb這樣的工具將代碼庫從Staging複製到Production。

關於您可能的過程

請問,如果你有一個登臺環境與配置的所有100多個站點,運行它的工作,和源代碼控制之下?這是所有開發人員和版權所有人用來進行修改的環境,然後他們會提交。當修改被認爲是好的時候,像RepliWeb這樣的工具可以將Staging中的版本(不包含.svn目錄)轉移到Production中。如果貴公司的文件系統開銷和安全風險可以忽略不計,那麼RepliWeb將被取代,只需簡單地在生產環境中清理檢查站點(確保刪除任何以前的工件)即可。

我希望這會有所幫助。

謝謝
扎卡里

+0

嘿,扎克,你是說所有的撰稿人和開發人員應該在本地進行更改,上傳到分段,然後從其本地副本提交?看起來似乎很難將這一過程解釋給那些習慣於在臨時環境中工作的撰稿人。更不用說這將是一個較慢的工作流程。我只希望我能夠在分期環境中直接工作1個「工作副本」。儘管每個人似乎都認爲這是一種犯罪行爲。我可能只是做一個像備份系統一樣的「時間機器」,至少能夠檢索過去版本的文件。 – DannyLeavitt 2010-10-15 21:59:58

+0

嗨,丹尼。不,我基本上是說你剛剛說的現在發生的事情:1.開發人員和撰稿人在分期環境中進行編輯; 2.他們從暫存環境(在版本控制下)提交這些更改,然後(通過適合您需求的某種機制); 3.將生產環境同步到分段。我明白有些人可能會認爲是異端邪說。也許我只是懶惰,但這似乎是一個合理的解決方案,因爲您的組織正在維護100多個網站。謝謝。 – 2010-10-16 06:03:44

0

我能想象你的痛苦,但你並沒有告訴我們什麼地方錯了你目前的程序)。畢竟,它「不會修復,如果它不壞」。僅僅因爲每個人都使用SVN/GIT等,所以沒有人會爲你服務。

我們在這裏有類似的要求,但幸運的是仍然有設置本地簽出和本地網絡服務器,有些人在提交之前使用。這是推薦的方式。 對於通過samba或nfs進行安裝的其他人來說,有一個共享的開發環境。但仍然每個人都擁有自己的工作空間。 工作在前臺的人很多,並且檢查了不重要的更改,他們使用web界面調用數據中心或目標(客戶端)系統上的主登臺系統上的svn更新。當事情破裂時,這是他們的自由裁量權和錯誤。當然,這些步驟可以完全自動化使用svn鉤子。

我們的結果迄今爲止是可以接受的。

如果您認爲個人工作空間的開銷對您的業務案例來說太高,那麼我認識的任何源代碼控制都可以幫助您。你仍然可以鎖定svn中的文件,以便人們無法檢查更改,直到它解鎖,但這是非常非常的1990年...

畢竟什麼是源代碼管理的目標?一些我能想到的:

  • Paralell發展與許多人
  • 隔離的穩定和不穩定的代碼
  • 透明度和回滾能力

當你有沒有一個個人工作空間的概念,一個「用戶」代替匿名的「團隊」來檢查文件,大多數源代碼管理功能自然不適合你。

也許你可以在你的coldfusion服務器上有子文件夾?通過從源代碼管理服務器自動更新所有這些開銷來減少個人工作區管理開銷(通常我不推薦)?

如果可能,您需要先離開「我們在服務器上編輯」習慣,然後再考慮源代碼控制。另一種方式圓將是複雜;)

Ç

0

在我們公司,我們已經非常相似的情況 - 不是開發更多的項目。所以所有的項目都在開發服務器上,開發人員可以在其上輕鬆開展工作。通常只有一個開發人員在給定時間在一個項目上工作。但開發人員來了,離開,休假,踢球等,所以我們需要快速切換項目。 但理想情況下使用版本控制,以擺脫對改變某些東西的恐懼,以及版本控制帶來的所有其他好處。

像svn,csv,p4等集中版本控件不適合這種解決方案。只能使用分佈式版本控制。

我們正要測試一些分佈式版本控制,比如Mercurial或GIT,它似乎是唯一適合在所描述的環境中工作的版本控制器,即使它們可能不是爲這種情況而開發的。

但是由於開發人員沒有個人空間,我們將無法使用版本控制的所有方面。開發者將需要把他們的名字int checkin note。但至少比什麼都沒有。

我做了一些研究,這裏是我發現了一些有趣的聯繫:

How to use version control on a remote development server?

Version control has me stumped

https://www.mercurial-scm.org/wiki/TortoiseHg

http://git-scm.com/