-----
工作在 A project, 其中有一個子模組 B 是來自其他的 SVN controlled project
方法 A:
-------
目前的實驗作法, 是將子模組 B 當成一個目錄, 然後整個 svn checkout 到到該目錄, 此
時可以把他當作 project A 的一個目錄(與其他的目錄一樣) import/commit to GIT
A-+-B-1.c
| 2.c
|
+-C-3.c
...
如上圖, 整個 A 是 GIT 控制的, 而 B 目錄是 checkout from SVN,
工作時以 GIT 為主, 如果有修改 1.c, 2.c 也把修改送上 GIT,
唯需要將 1.c, 2.c 的修改也送回 SVN (可以每次 GIT commit 後, 或累積數次) 時,
則切到 B 目錄上操做 SVN 的 commit 動作.
如果 B 的 SVN 源頭有新的修改, 也是在 B 目錄上操作 SVN update(or merge),
然後再 GIT commit 此次的 B 的 SVN update.
問題:
-----
B 目錄(並其子目錄) 下會有一大堆 .svn\* 的控制目錄(可能被隱藏起來)跟檔案.
GIT 不應該管控他, 如果這些檔案被送交 GIT, 則不適當的順序(commit 1.c, 2.c 沒有依先
SVN commit, 再 GIT commit...)操作, 有可能會毀掉 B 的 .svn 的控制.
解決:
-----
就不要把 .svn 之類的目錄跟檔案送進 GIT 控制, 方法是利用在 A 目錄(GIT project 根目錄)下
放一個 .gitignore 文字檔案.
裡面一行文字描述要 GIT 忽略的檔案類型
.svn*
p.s. 建議可以多加一些可忽略的檔案格式(如每次 build VS6/VS2010 都會重新產生的檔案)
.svn*
*.obj
*.pch
*.idb
*.pdb
*.log
*.tlog
*.suo
*.user
*.aps
*.clw
*.ncb
*.opt
*.plg
問題:
-----
如果是 M$ Windows 下, 是不永許產生"無前檔名"的文件 :(
解決:
-----
利用 msysgit 的 bash 環境產生!
開啟 GIT bash 切到 A 目錄下(或在目錄 A 上執行右選單的 GIT Bash here), 執行
>touch .gitignore
看看有沒有產生
>ls -al
explorer 打開目錄 A window, 也能看到 .gitignore, 此時用任何編輯器編輯他...
編輯好後存起來, 可以在 GIT bash 裡面切到 B 目錄, 執行
>git status
應該看不到 .svn 了...
git commit 時, 這些 .gitignore 裡面描述的檔案也是 "不會出現"
方法 B:
-------
一般比較正統的作法是用 git-svn 指令, 見 svn folder as sub module of git 描述方法
我實際試用了一次:
1. clone svn 步驟是需要學習的.
2. [印象中] 在我實際(當前 GIT) project, 我只要 SVN repo 個的一個子目錄(模組), 而非全部目錄,
不容易這樣子做, 我試了許久, 繞了一圈有做出來, 但又好像怪怪的...
3. [印象中] 可以直接一次 git commit 就送回 SVN repo, 這是方法 A 不及的.
以上 [印象中] 因為時間過太久了, 我忘了為什麼又放棄此法, 有時間我還要再驗證一次.
沒有留言:
張貼留言