如果你想爲特定的存儲庫這樣做:
export GIT_DIR=/home/me/project/.git2
export GIT_WORK_TREE="$(dirname "${GIT_DIR}")"
git ...
或:
git --git-dir=/home/me/project/.git2 --work-tree=/home/me/project ...
如果要處處改變的Git目錄的默認名稱,你可以做一些令人費解像這樣:
git() (
# if GIT_DIR is set, honor it
[ -z "${GIT_DIR+set}" ] || { command git "[email protected]"; exit $?; }
# find GIT_DIR
GIT_DIR=$(
: "${GIT_DIR_NAME=.git2}"
while true; do
[ -d "${GIT_DIR_NAME}" ] && {
printf '%s\n' "${PWD%/}/${GIT_DIR_NAME}"
exit 0
}
[ "$(pwd -P)" !=/] || {
echo "fatal: Not a git repository" >&2
exit 1
}
cd .. || exit 1
done
) || exit 1
# set GIT_WORK_TREE based on GIT_DIR if it is not already set
[ -n "${GIT_WORK_TREE+set}" ] || {
GIT_WORK_TREE=$(dirname "${GIT_DIR}") || exit 1
}
# run the actual git with the discovered directories
GIT_DIR=${GIT_DIR} GIT_WORK_TREE=${GIT_WORK_TREE} command git "[email protected]"
)
以上,當你運行git foo
它會搜索h代替.git2
而不是.git
。對於工作目錄,它將使用包含.git2
的目錄。
你爲什麼要這樣?一點點的背景可能會幫助我們一點點。 – tjameson
一般情況下,想知道有偏見:) – peterk
但是:在這種情況下,我有一個私人內部和一個公共回購協議,並希望保持它們同步和分開,但都植根於同一棵樹。理想的情況是,如果可以爲特定存儲庫分配「被剔除的」子集,那麼當「公共」用戶訪問它時,它只會包含來自特定分支的數據而不是完整的歷史記錄,但是,因爲git將事物壓縮到非分支特定的分發包包含了自從版本庫誕生以來所有的所有歷史記錄,這在git中顯然是不可能的。 – peterk