2017-02-19 73 views
0

my answeranother question我提出了一個解決方案,它需要檢出一個臨時工作樹,但它必須安全地執行,而不以任何方式破壞源存儲庫。特別是,該操作必須安全地與其他git操作同時運行。我相信這是可以做到的,並沒有在答案中詳細說明,然後必須提供一個評論,說明如何做到這一點。這個自我回答的問題填補了這個空白。如何從git存儲庫安全地簽出臨時工作樹?

回答

1

下面的腳本將工作樹檢出到當前目錄中,而不會以任何方式影響源存儲庫(特別是它可以在沒有寫入權限的存儲庫上執行,例如屬於另一個用戶的存儲庫)。

用法:

git-checkout-tmp-worktree repo_path [revision] 

實例:

git-checkout-tmp-worktree ~/myrepo1 
git-checkout-tmp-worktree ~/myrepo1 HEAD^^ 

GIT中結帳-TMP-worktree

#!/usr/bin/env bash 

if [[ $# -eq 0 || $# -gt 2 ]] 
then 
    echo >&2 "Usage: $(basename "$0") repo_path [revision]" 
    exit 1 
fi 

repo="${1}" 
revision="${2:-HEAD}" 

tmpdir="$(mktemp -d)" 
trap "rm -rf '$tmpdir'" EXIT 
GIT_INDEX_FILE="$tmpdir/index" git --git-dir="$repo"/.git checkout "$revision" . 
相關問題