完整的問題重寫
Git的 - 如何自動推送的變化在一個目錄到另一個分支
所以我想我是非常簡單和直接的解釋這個問題,但似乎我過於簡單得多,所以這裏是所有額外的細節。希望這可以幫助大家看到這也不是重複的。
我有一個儲存庫(項目),我想自動推從一個目錄提交的一個分支到另一個分支的過程;這是我還沒有遇到的東西。
這裏是我的項目,其完整的結構:
[PROJECT MASTER BRANCH]
|- gh-pages (directory)
|- css (directory)
|- index.html (file)
|- readme.md (file)
[PROJECT gh-pages BRANCH]
|- (empty at the moment)
我所希望做的是創造了一個鉤子,將自動從主分支處理我的GH-網頁目錄的變化,以及複製/克隆/由項目網站分支gh-pages分支將它們替換(無論使用哪個術語都是正確的)。這裏是離開了所有其他文件的例子:
[PROJECT MASTER BRANCH]
|- gh-pages (directory) <=== SEE UPDATE BELOW [A]
| |- css (directory)
| | |- style.css (file)
| |- index.html (file)
[PROJECT gh-pages BRANCH]
|- css (directory) <=== SEE UPDATE BELOW [B]
| |- style.css (file)
|- index.html (file)
我完全新的到這個水平的Git樞紐。我通常只是堅持基礎知識,從不使用終端/外殼。因此,總結澄清我希望做什麼,我想:
- 只需要在[主分支]工作。我需要對[gh-pages分支]做出的所有更改我在[Master Branch]的gh-pages目錄中執行
- 最好通過添加一個簡單的文件來完成此操作,該文件似乎是post-receive hook?
下面是一些後收到,我嘗試使用(我從學習一些東西做的話),但它不工作掛鉤代碼:
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
git checkout gh-pages
git checkout master -- gh-pages
git add gh-pages
git commit -m "Updating project website from 'master' branch."
fi
done
注意
正如上文我的評論:這不是重複的。這不是要求如何推送,而是如何在正常推送時自動運行的其他命令。這些命令可以完成我的OP中提到的額外工作。
UPDATE
我已經添加了這些箭頭的我的代碼部分我指的是如下:< ===
[A]我應該在這裏發生的是,Git的應遞歸讀取的主分支gh-pages目錄,並且只從那個已經更新的東西(或者所有東西如果更簡單)複製到gh-pages分支中。
[B]因此,如果master中的gh-pages目錄具有index.html文件,並且具有style.css文件的css文件夾應該僅複製該結構而不是gh-pages目錄本身。下面是一個壞掛鉤,複製GH-頁面目錄過的例子:
[PROJECT gh-pages BRANCH]
|- gh-pages (Directory) <=== NOT SUPPOSED TO HAPPEN
| |- css (directory)
| | |- style.css (file)
| |- index.html (file)
此外,鉤子應該不超過任何其他文件副本,但什麼是GH-頁面中。即使在主分支中更改了其他幾個文件,也應該只複製gh-pages目錄文件。
[C]新代碼 - 這工作,但導致一個錯誤:
#!/bin/bash
branch=$(git rev-parse --abbrev-ref HEAD)
if [ "master" == "$branch" ]; then
git fetch && git checkout gh-pages
git checkout master -- gh-pages/*
git add -A
git commit -m "Updating project website from 'master' branch."
git push -u origin gh-pages
fi
這有兩個原因無法工作。 1)如果回購在落後時無法處理,則會出錯;如果拉頭被用於代替取得本地回購已被清空,像這樣:
如果我離開取得本地回購保持它應有的方式:
2)整個gh-pages目錄被複制到gh-pages分支,而不僅僅是它裏面的文件。
可能重複[如何在git中提交後自動推送?](http://stackoverflow.com/questions/7925850/how-to-automatically-push-after-committing-in-git) – gzh
@gzh this不是重複的。這不是要求如何推送,而是如何在正常推送時自動運行的其他命令。這些命令可以完成我的OP中提到的額外工作。 [那個問題](http://stackoverflow.com/questions/7925850/how-to-automatically-push-after-committing-in-git)是關於每次用戶點擊提交時自動執行整個Git循環,而不是提交掌握並同時克隆一個目錄到一個完全不同的分支。 – Blizzardengle
看來你需要寫一個post-receive hook來完成這個任務。 – gzh