我有一個應用程式接受 git 樹物件哈希作為輸入,并且需要將這些樹提取到臨時目錄。
今天,我們通過以下方式做到這一點:(道德上)
mkdir -p temporary/directory
cd temporary/directory
git archive --format tar f6ad2c912329ae4108883b8b8e20f2c50e968466 --output throwaway.tar.gz
tar xf throwaway.tar.gz
rm throwaway.tar.gz
有沒有辦法讓 git 直接提取/簽出樹,而不是需要先創建一個一次性的 tarball?
uj5u.com熱心網友回復:
給定環境變數中的 Git 存盤庫$GIT_DIR和任意但有效的樹哈希 ID 引數$1,在空目錄中運行它:
#! /bin/sh
GIT_INDEX_FILE=$(mktemp) || exit 1
rm -f "$GIT_INDEX_FILE"
trap "rm -f $GIT_INDEX_FILE" 0 1 2 3 15
git read-tree -m -u $1
成功了。該git read-tree命令將樹讀入(不存在,因為我們洗掉了它)臨時索引檔案mktemp,創建一個填充有該樹的索引。-m標志( 、 或 之一-m是--reset必需--prefix的)啟用標志,該-u標志填充作業樹,即當前目錄。
添加一些樣板檔案以接受 Git 存盤庫引數并用于git --git-dir=$dir避免必須匯出GIT_DIR到上述 shell 片段。關鍵命令是git read-tree。您也可以讀取樹物件,然后使用git checkout-index,但鑒于-u不需要第二個單獨的 Git 命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488201.html
標籤:混帐
上一篇:Git不使用全域組態檔中的用戶
