1. 程式人生 > >git單獨針對一個倉庫實現子目錄提交修改

git單獨針對一個倉庫實現子目錄提交修改

git

項目組有個需求:目前我們線上代碼都是git 倉庫托管的,開發和前端都需要對倉庫中的js目錄中的文件進行修改,為了避免沖突,想到了把倉庫中的子目錄分離開來,讓前端工程師可以提交到git 倉庫。以前是通過ftp進行更新,會有很多問題。更改了這種方式會提高工作效率

git和svn對比:

svn是基於文件方式的集中存儲,Git卻是基於元數據方式散布式存儲文件信息的,它會在每次Clone的時候將所有信息都取回到本地,即相當於在你的機器上生成1個克隆版的版本庫,既然本地有了完全的版本庫,肯定就有所有權限了,所以也就沒辦法針對子目錄的進行權限控制了。

實現:

git從1.7.0開始支持sparse clone,sparse clone也只是1個變通的方法:先拿到全部repository的object等元數據信息,然後在本地加1個叫.git/info/sparse-checkout的文件(即黑名單、白名單,支持

正則,參見下文具體操作命令)來控制pull那些目錄和文件(類似.gitignore文件,都是本地的概念),變通的實現git只clone倉庫中指定子目錄和文件

步驟:

1.在本地創建一個目錄,用於提交代碼

mkdir test


2.初始化倉庫

git init


3.拉取遠程倉庫的objects信息

git remote add -f origin [email protected]:test/test.git

4.開啟sparse clone

git config core.sparsecheckout tr

ue

5.設置需要pull的目錄 *表示所有

echo "develop"  >>.git/info/sparse-checkout
echo "web/assets/*"  >>.git/info/sparse-checkout

6.拉取遠程倉庫

git pull origin master

7.查看

ll assets/
total 4
drwxr-xr-x 1 Administrator 197121 0 七月 10 10:51 css/
drwxr-xr-x 1 Administrator 197121 0 七月 10 10:51 img/
drwxr-xr-x 1 Administrator 197121 0 七月 10 10:51 js/
drwxr-xr-x 1 Administrator 197121 0 七月 10 10:51 lib/

8.本地測試提交

touch test.txt
echo "this is a test"
git add .
git commit -m "test"
git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 331 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To code.aliyun.com:test8/test.git
037b8ec..317b2a2  master -> master

參考文檔:http://www.wfuyu.com/technology/25144.html


本文出自 “不拋棄!不放棄” 博客,請務必保留此出處http://thedream.blog.51cto.com/6427769/1945853

git單獨針對一個倉庫實現子目錄提交修改