2013-02-08 80 views
0

在使用Javascript進行開發時,作爲練習,我們在服務器上上傳了縮小的JS,因此我只想在我的主分支中只保留縮小的JS,而在本地(專用)分支上進行更改。有沒有一種簡單的方法可以將本地分支中的縮小JS合併到Master?將選擇性文件從一個分支添加到其他

櫻桃選擇提交不會工作,因爲我不希望從我的私人提交合並所有文件。 This method建議從一個分支中提取特定文件以提交其他文件,我想知道是否有一種設置/替代方法來自動執行此操作,即合併只需要縮小的js文件(* .min.js)?

+0

爲什麼它在'master'中同時存在未定義或縮小的代碼?這聽起來像你正在尋找複雜的東西,沒有什麼好處。 (避免在服務器上有一堆很小的未使用的文件。) – millimoose 2013-02-08 16:48:44

+0

此外,在源代碼控制的其他地方有更好的解決方案。您可以在應用程序代碼中根據需要縮小JS,也可以使用在部署期間運行的工具(例如['grunt'](http://gruntjs.com/))。 – millimoose 2013-02-08 16:49:30

+0

@millimoose,因爲主分支與我不想公開分支的客戶共享 – Ani 2013-02-09 11:36:59

回答

1

聽起來好像您在文檔根目錄中有一個遠程回購,您正在推送該文件並將其用作您的實時站點的部署機制。我想說,在文檔根目錄下有一個git repo不是很好的部署方式。 (任何人都可以克隆你的整個回購,包括你的整個提交歷史以及可能令人尷尬的未發佈的代碼。)也許你的設置有所不同,但我會根據你寫的內容去做這個假設。

如果您使用post-receive掛鉤將master提取到您的文檔根目錄,但讓您的git回購存儲在別處,那麼您可以無憂慮地存儲縮小和非縮小的JS源代碼。

將您的git repo移出您的登臺服務器上的文檔根目錄。

.git/hooks/post-receive暫存Web服務器上:

#!/bin/sh 
GIT_WORK_TREE=/path/to/your/docroot git archive master --format tar | tar -x "*.min.js" 

這將導致gitmaster分支的原始副本導出到您選擇的目錄。它將通過管道tar來完成此操作,您可以使用它來過濾哪些文件需要從哪裏出來,哪些不需要。 post-receive是一個shell腳本,所以你可以真的在這裏狂放,在部署之後添加後續行來做任何你想要的內務。

所以,上面是我建議你做的。如果您仍想繼續並僅保留主分支中的一部分文件,則可以使用您在shell腳本中鏈接的方法。

假設你的本地分支的名字是local,並希望「部署」到master已經承諾的一切,做一個deploy.sh(並將其添加到.gitignore如果你想):

#!/bin/sh 
git checkout master 
git diff-tree --name-only -r local | grep ".min.js$" > temp_file_list.txt 
git checkout local `sed 'N;s/\n/ /' temp_file_list.txt` 
git commit -m "Selective 'merge' of minified js from my local branch" 

然後你只需每當你想用更改的.min.js文件更新主文件時,運行deploy.sh。如果您使用的是Windows並使本地文件保持爲DOS格式,則應在上面的sed命令中輸入\r\n而不是\n - 並安裝基於bash的命令行git工具。

+0

不是關於使用遠程回購作爲現場網站。我的要求更多地是在共享某些文件的同時將其他文件保留爲本地回收站中的私人文件。我認爲你的第二種方法可能會奏效。星期一會試試看,謝謝! – Ani 2013-02-09 12:38:34

相關問題