我想創建一個shell腳本add,commit以及push新的或已更改的檔案到存盤庫。目前,我的腳本通過逐個檔案迭代來執行此操作,這需要太多時間。我的要求是仍然按檔案執行此檔案,但這次我只想迭代新檔案或更改的檔案。
我的shell腳本如下:
#!/bin/sh
CUR_DIR=$(pwd)
PROJECT_DIR="${CUR_DIR}"
for fileToCommit in $(find ${PROJECT_DIR}/* -type f);
do
test -f "$fileToCommit" || continue
printf "%s\n" "${fileToCommit}"
git add "${fileToCommit}"
git commit -a -m "[ADD] New ${fileToCommit##*/} File"
git push
done
我怎樣才能毫不費力地做到這一點?
uj5u.com熱心網友回復:
從git status 檔案:
--porcelain[=<version>]
Give the output in an easy-to-parse format for scripts.
This is similar to the short output,
but will remain stable across Git versions and regardless of user configuration.
這是為腳本收集所有已更改/未跟蹤/洗掉檔案的預期方法。它將為您提供易于決議的輸出,如果需要,仍然允許您單獨處理所有檔案。
此外,我認為porcelain研究 git 術語中的含義是明智的。它將幫助您跨不同的 git 版本撰寫可靠的腳本。
Git 中的“瓷器”一詞是什么意思?
如何使用它的一個小例子:
filesToPush=$(git status --porcelain | awk '{print $2}')
for file in $filesToPush; do
# Your actions.
done
此示例認為您希望對git status.回傳的所有檔案執行相同的操作。如果您想要針對不同檔案狀態(已更改、洗掉、未跟蹤)的不同行為,您還需要提取第 1 列并根據此更改行為。
如何從命令輸出中獲取第二列?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336975.html
