Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


7 questions online user: 31

0
votes
answers
6 views
+10

svn的高級開發人員確認前提交代碼

2

我想通過高級開發人員來檢查初級開發的代碼,他們承諾他們的代碼SVN之前。我如何使用SVN管理它?我的觀點是高級開發人員通知Junior開發人員想要提交他們的代碼(例如通過電子郵件),並在他們確認後,代碼提交。 我們的SVN是windows服務器上svn的高級開發人員確認前提交代碼

謝謝。

+1

我不認爲在Subversion中有這樣的支持。也許你想探索轉向Git。 – tripleee

+1

雖然git支持更好的分支策略,但「這樣的事情」被誇大了。 –

沙发
0
1

顛覆不直接支持「代碼審查」的模式一樣,你可以用來與GitHub的拉動請求。有一些附加工具可能對此有所幫助,但我不能推薦任何,因爲我從未使用它們。

你可能想嘗試是有開發商在自己的分公司工作,並承諾這一點,那麼請高級開發人員來審查,然後合併到中央幹線或另一個分支。

+0

這。對此的附錄是,這實際上可以通過svn authz文件實施。授予(初級?)開發人員對分支機構的讀寫訪問權限,並嚴格閱讀中繼線的訪問權限。然後,給高級開發人員讀/寫訪問幹線(以及分支機構,如果需要的話)。這樣,合併到主幹__中的唯一更改就是來自高級開發人員。 – Chris

板凳
0
1

有兩種可能性:

  1. 您可以使用分支和SVN的--reintegrate選項將它們合併自動回主幹。這工作得相當好,只要你遵循一些規則(可以彎曲他們,你可以打破他們,但你會遇到困難):

    • 從來沒有做任何樹合併(合併子目錄;僅在主幹或分支合併級別)
    • 在不同的分支之間永不合並,除了你正在分支的路徑(通常這是幹線)。所以沒有同事交叉。
    • 總是將分支中的所有提交合併到中繼,並始終將中繼中的分支完全同步。所以沒有采摘櫻桃
    • 通過遵循這些規則,您可以輕鬆地合併並保持您的樹幹清潔,而無需使用任何修訂版本號。有關更多詳情,請參閱svnbook/merging
    • 也意味着整合合併(從developerbranch到後備箱)總是無衝突的(樹幹)的所有變化通常是由開發商事先合併。如果主幹維護者合併過程中遇到衝突,他拒絕分支,並告訴開發人員同步從主幹合併解決這個矛盾在他的分支
    • 你應該保護樹幹從的初級開發人員提交但既無必要,也很重要的整體過程
    • https://stackoverflow.com/a/7387277/23264更多信息請參見(有一些奇特的ASCII藝術)
  2. 可以接受補丁的人送左右。這是一個非常手動的過程,但它取決於您擁有多少個Junior Developer。請注意,雖然聽起來不可能,但整個svn開發過程的工作原理是將補丁發送到郵件列表,直到您發送足夠的提交者權限。

地板
0
1

你可以讓你的初級開發者只在分支上工作,並阻止他們提交主幹。你可以通過在SVN服務器上設置特定的回購路徑的權限,或者通過編寫預先提交的掛鉤來實現。通過設置一個壓倒一切的權限

VisualSVN Server Path Properties

我有樣,在這個例子這裏被騙:

如果您使用VisualSVN服務器,你可以在此對話框中進行配置。對於大型團隊來說,如果您在repo上設置只讀權限,然後明確授予開發人員的/ branches /和高級開發人員的/ trunk /的訪問權限,則需要更具擴展性的東西。

0
votes
answers
6 views
+10

讓`git svn find-rev`搜索整個版本庫

1

當我想要根據SVN修訂版本id獲取提交的本地散列時,我通常運行git svn find-rev。但是,一個很大的不便之處在於,該命令只會查找當前分支中的提交或修訂後的命令中明確指定的分支。讓`git svn find-rev`搜索整個版本庫

有時,我只知道修訂ID,我想在不知道分支名稱的情況下找到本地散列。有沒有辦法用git svn find-rev來做到這一點?這是有道理的,知道SVN修訂是獨一無二的。

編輯:

事實證明,沒有做到這一點沒有什麼好辦法。 我接受了答案,該答案提供了一個解決方案,但搜索具有大量分支的存儲庫(如我的)需要很長時間。最後我寫我自己的殼功能,結合使用常規svngit svn,其工作方式要快得多:

gitrev() 
{ 
    if [ -z "$1" ]; then 
    echo "${FUNCNAME[0]} <revision> [git_args]" 
    return 1 
    fi 
    local rev b 
    rev="$1" 
    shift 
    b="$(svn log -v -c "$rev" "$SVN_BRANCHES_URL" | grep -m1 -Po '/branches/K[^/]+')" && 
    git svn find-rev "r${rev#r}" "origin/$b" "[email protected]" 
} 

如果你使用它,你可能需要更換grep -P一部分,如果你不是在GNU/Linux操作系統。可以使用或不使用「r」前綴來指定修訂版本。

沙发
0
1

要在所有地方分公司,你可以通過電子郵件進行搜索。 G。做

git for-each-ref --format='%(refname)' refs/heads/ | xargs -l git svn find-rev r123456 

擁有它更可靠,但仍快,你可以用一點點做更復雜的線條,看起來在所有裁判,直到找到一個匹配,然後中止,E。 G。像

while read ref; do result="$(git svn find-rev r123456 "$ref")"; [ -n "$result" ] && echo $result && break; done < <(git for-each-ref --format='%(refname)') 
+0

似乎喜歡它,但在我的情況下,我也必須搜索遠程分支機構,這需要很多時間。 – Thunderbeef

+0

是的,可能需要相當長的一段時間,特別是如果你有很多參考資料,並且你的電子郵件。 G。給所有的參考文獻,修訂版本在多個分支,或者在一些分支和一些標籤中,你會多次得到結果。但這是我所知道的唯一的方式。否則,您必須編寫一個基本相同的循環,並在找到結果後立即停止。 – Vampire

+0

好吧,我發佈了另一個可以在整個存儲庫中可靠工作的單線程,並在找到某個東西后立即停止。您可以通過向e添加排序來修改它。 G。先查看本地分支,然後查看遠程分支,然後查看標籤或類似的東西。 – Vampire

板凳
0
0

git svn find-rev確實顯示來自當前分支的提交sha-1值。但你可以使用shell腳本搜索整個回購的提交。

這樣的,如果你想從修訂r9相應提交的,那麼你可以爲r9如下指定變量rev值:

#!/bin/sh 

rev="r9" 
for branch in $(git branch -r) 
do 
{ 
    git checkout $branch 
    sha=$(git svn find-rev $rev) 
    if [ ! -z "$sha" ]; then 
    { 
    echo "The revision $rev has the corresponding commit is $sha. And the commit is on $branch branch." 
    break 
    } 
    fi 
} 
done 
0
votes
answers
4 views
+10

來自SVN的所有提交歷史記錄都沒有遷移到GIT

1

我是一名開發人員,並且第一次將我的整個SVN存儲庫遷移到GIT存儲庫。作爲一個POC,我已經遷移了當前的開發分支。移民在歷史上也取得了成功。 問題:GIT中的SVN提交歷史記錄 遷移結果:當前SVN的所有分支歷史記錄都是從SVN遷移過來的,但是從SVN中創建該分支的日期開始。 我的期望:每個單獨文件的歷史以及完整的歷史和相關的代碼更改。來自SVN的所有提交歷史記錄都沒有遷移到GIT

例如:我的根存儲庫是「MyProject」。每個版本都有單獨的代碼倉庫,比如「MyDevRepo-rel-1.0」等等......我有一個文件「Helloworld.java」,它是在自發布1.0以來一直在處理的「MyDevRepo-rel-1.0」中創建的直到目前的版本,說它是「MyDevRepo-rel-5.0」。 現在,當我遷移「MyDevRepo-rel-5.0」時,我只有文件HelloWorld.java的當前分支提交歷史記錄,但不是從發行版1.0開始的

任何人都可以幫忙。

+0

請您提供明確的問題陳述?我還想邀請你學習SVN和git之間的區別。 – evolutionxbox

+0

MyDevRepo-rel-1.0,MyDevRepo-rel-5.0等是MyProject下的子文件夾嗎?如果它們是子文件夾,那麼文件Helloworld.java位於何處?如果修訂版本1.0已經遷移到git repo,那麼修訂版本中的所有文件都應該正確查看,除非文件Helloworld.java沒有提交到版本1.0中。你可以仔細檢查svn日誌來檢查哪個版本提交文件'Helloworld.java'。 –

+0

1.MyDevRepo-rel-1.0,MyDevRepo-rel-5.0等是MyProject.2的子文件夾.HelloWorld.java最初是在MyDevRepo-rel1.0中創建的。 3.對於每個發佈開發週期,MyDevRepo-rel-1.0是第一個,MydevRepo-rel-5.0是第5個發佈版本.HelloWorld.java在發佈1.0到5.0之間有自己的提交歷史記錄。假設HelloWorld.java文件有10個提交,直到5.0和5提交到5.0。當我遷移5.0回購時,我獲得了5次提交歷史,但我的期望是獲得所有15次提交歷史記錄(從rel 5.0開始的10到5.0 + 5)。我的期望是否正確,如果不是,請提出建議做什麼。 – Venkata

沙发
0
-1
Thanks all for responding to my doubts. I am able to resolve this issue and 
the set of commands follow. 

My requirement is : MIGRATE EXISTING SVN repository to GIT with all the commit 
history. 


md mydirectory 
cd mydirectory 
git svn init <SVN_ROOT_URL> 
git config --global user.name "MY NAME" 
git config --global user.email "MY EMAIL" 
git config svn.authorsfile authors.txt 
git svn fetch 
git svn show-ignore >> .gitignore 
git remote -v (to check the remote branches) 
git remote add origin <MY_GIT_REPO>.git 
git add . 
git commit -m "migrating svn to git" 
git push -u origin master (this will push your local repo to the git server) 
git svn rebase (this command will sync the latest changes from svn to the current git repo) 
git push (this command pushes all the latest code checked-out code from SVN to GIT). 

Mistake I made : I migrated one individual branch and expected all the 
commit history right from the inception of every file. 

Learnings : If I want all the commit history of every individual file, then 
I had to migrate the entire SVN repository from the root. This resolved my 
problem. 
Please add if there are any missing things. 
0
votes
answers
4 views
+10

一般SVN目錄

2

我有SVN地址http://somesvn.intra/svn/somepro/,其中包含我需要處理的項目。當我做checkot時,我得到了souch目錄結構:一般SVN目錄

linux 
--source 
----branch 
----tag 
----trunk 
win 
--source 
----branch 
----tag 
----trunk 

這對我來說看起來很奇怪,因爲我期望直接進入源位置。可以直接去http://somesvn.intra/svn/somepro/win/source/trunk/ 做結賬,編輯和提交而不影響例如Linux項目的中繼提交嗎?恐怕我會看到win/trunk項目變更linux/trunk項目svn日誌。

+0

您可以檢出在倉庫內的任何目錄固定的工作副本,這是很正常的使用項目的主幹或分支特定的工作副本。 –

+0

不知道爲什麼他們每個人都有一個'源'目錄,但其餘的看起來是合法的。 'linux'和'win'將被視爲單獨的項目。 – BoffinbraiN

沙发
0
1

簡答:是的,通常幹線是「主」副本,可以這麼說。您通常不會檢出BASE URL,您通常會檢查中繼線或分支下的其中一個目錄。如果這是您開發團隊的範例,那麼使用trunk作爲工作副本是完全可以接受的。


更深入:是的,SVN發展的範例是通常trunk是工作發展目錄團隊會根據他們工作過的。通常,團隊中的開發人員將針對不同的功能/錯誤進行工作,而不是工作在trunk上的每個人,並可能導致彼此之間的衝突。通常開發者會創建分支,一旦他們的變更完成,他們會將他們的變更合併回主幹。使用你的榜樣,你會看到類似這樣的:

linux 
--source 
----branch 
------vico-branch (contains source) 
----tag 
----trunk (contains source) 
win 
--source 
----branch 
----tag 
----trunk 
0
votes
answers
4 views
+10

本地git存儲庫到bitbucket存儲庫

-1

我正在從svn回購到bitbucket回購遷移過程。本地git存儲庫到bitbucket存儲庫

在這一刻,我有所有svn回購當地git回購。我可以在本地git回購中顯示所有svn回購歷史記錄的提交和用戶日誌。

在下一步嘗試一些小時後到當地的git回購上傳到遠程到位桶回購與命令

git push -u origin master 

,沒有與用戶不匹配錯誤。

Please ensure that the commit contains the correct Committer EMail 

這是強制性的前 推動創建所有commiters用戶作爲到位桶回購的用戶,所有用戶都連接到JIRA。

這是一個巨大的svn回購有舊commiters,現在不在公司工作,他們不是jira用戶,我應該如何處理? 謝謝。

+0

我有一種感覺[this thread](https://stackoverflow.com/questions/28425670/git-error-expected-committer-email-but-found-karanxyz-com/28425852?noredirect=1#comment45194115_28425852)可能是相關的,儘管解決方案並非真正可用。你是否能夠查看bitbucket日誌並追查那裏的問題? –

+0

問題已解決,啓用了標記** **另一個提交檢查器** ** bitbucket repo的** settings/hooks **菜單。 – LennyBaxter

沙发
0
0

提交者用戶未與bitbucket用戶或jira鏈接。這是由電子郵件格式引起的主要不正確。

要檢查提交者的電子郵件,您可以使用git log -1(或git log如果有多個提交者),提交將與格式如下顯示:

Author: user <[email protected]> 
Date: Tue Sep 26 02:58:34 2017 +0000 

Commit message 

如果您遷移SVN通過git svn clone與git,如上所述,提交者的電子郵件地址通常不能正確導入。

您可以更改提交者電子郵件的所有提交如下:

git filter-branch --commit-filter ' 
     if [ "$GIT_AUTHOR_EMAIL" = "current email" ]; 
     then 
       GIT_AUTHOR_EMAIL="new email"; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD 

這將需要幾分鐘的時間在更換電子郵件地址,提交歷史。之後,你可以再次推。

0
votes
answers
3 views
+10

如何查看誰在Windows文件服務器上打開了一個文件

2

我正在考慮在工作中轉向版本控制系統,但對於許多撰寫人員來說,學習曲線可能太多了,因爲他們在我們的共享開發中打開簡單的html文件並對其進行編輯服務器。主要問題是,有時候兩個人會立即在同一個文件上(在我們的開發服務器上)工作並相互覆蓋。如何查看誰在Windows文件服務器上打開了一個文件

是否有任何擴展到Windows資源管理器,只會顯示一個鎖定圖標附近的共享文件已被使用?對於我們來說,像這樣的事情可能比教大家從自己的工作副本開發並使用版本控制客戶端更簡單。我只想給用戶一個可見的警告,即一個文件已經被使用,不應該被使用。謝謝

沙发
0
3

甚至可能沒有足夠的文件服務器本身的信息來確定這一點。例如,如果您在記事本中打開HTML文件,則從磁盤加載該文件,然後關閉文件。記事本在內存中保留一個副本,而不會將該文件保持在磁盤上打開。這意味着文件服務器甚至不知道有人正忙於編輯文件。

一些文本編輯器可能會保持文件打開,但這可能是例外而不是規則。

版本控制系統(Subversion和TortoiseSVN是方便人們使用),用戶可以申報意圖不依賴於底層技術,在短短的正確的方式打開文件。 TortoiseSVN在被鎖定的文件旁邊顯示一個「鎖定」圖標(用「獲取鎖定」菜單選項鎖定文件)。沒有鎖的文件被標記爲只讀,以幫助用戶知道他們還沒有準備好編輯它們。

+0

謝謝Greg。我主要關心的是爲那些希望對簡單的HTML文件進行小小調整的公司設置本地Coldfusion/IIS環境。他們認爲必須在本地簽出一個站點,調整它,簽入,在開發服務器上更新,測試,重複過程(如果不符合他們的喜好),這是荒謬的。其他人在我的情況?解決方案? – DannyLeavitt 2010-10-10 20:23:07

0
votes
answers
1 views
+10

如何在GIT和SVN之間進行雙向同步

1

如何在GIT庫和SVN庫之間進行雙向同步?我已經看到了如何從SVN轉換爲GIT,但沒有太多關於如何在兩者之間順利同步。如何在GIT和SVN之間進行雙向同步

目的是將項目保存在兩種類型的存儲庫中,並讓它們生成/跟蹤相同的內容。

作爲一個額外的要求,作爲主題的SVN存儲庫不包含主幹和分支。

沙发
0
3

爲了確保SNV和Git存儲庫之間真正的雙向同步,您需要一個專用的第三方工具。

我只知道SubGit能夠做到這一點可靠。但它不是免費的。只有從SVN到Git的一次性遷移是。

板凳
0
0

這篇文章 - Creating a two way sync between a Github repository and Subversion - 看起來是一個解決方案:

  • 創建一個GitHub的服務器或服務器到位桶上一個混帳回購協議。克隆空回購。添加一個readme-git文件並在master上提交。

  • 最初創建SVN跟蹤分支:

 
    git branch --no-track svnsync 
    git checkout svnsync 
    git svn init http://your-svn-server/your-repo 
       # here removed `-s` if the svn repo is not on a standard layout 
       # or use file:///path/to/local/repo 
    git svn fetch 
       # add if needed `--authors-file svn-authors.txt` 
    git reset --hard remotes/git-svn 
       # the post said `remotes/trunk` but it does not look right 
  • 同步從SVN到混帳:
 
    git checkout svnsync 
    git svn rebase 
    git checkout master 
    git merge svnsync 
       # add `--allow-unrelated-histories` to the first merge 
    git push origin master 
  • 同步從GIT中的svn:
 
    git checkout master 
    git pull origin master 
    git checkout svnsync 
    git svn rebase 
    git merge --no-ff master 
    git commit 
    git svn dcommit 

上述順序的一個缺點是添加了僞造的readme-git文件,因此可能會拉出非跟蹤分支。我想,從最初從svn回購克隆的git回購開始,可能會避免這個問題。

+1

是的,它可以用於簡單的回購/分支機構,但是SubGit編寫的角落案例太多以致於無法解決這些問題。 – VonC