是否可以在Git目录外创建一个Git哈希对象?

时间:2017-09-04 11:16:07

标签: git git-diff git-hash

我想在两个字符串之间获取git diff。以下命令有效:

git diff $(echo "my first string" | git hash-object -w --stdin) $(echo "my second string" | git hash-object -w --stdin)  --word-diff

但是,如果没有在Git目录中执行,它就会失败。

我相信这部分命令失败了:

echo "my first string" | git hash-object -w --stdin

有什么方法可以在Git目录外执行吗?

2 个答案:

答案 0 :(得分:4)

  

我相信这部分命令失败了:

table
     

有没有办法解决这个问题,以便它可以在git之外执行   ?目录

您遇到的问题是由于您传递给table = browser.find_element_by_xpath(("//table[@class='table table-striped']/tbody/tr/td[5]")); 命令的echo "my first string" | git hash-object -w --stdin 选项。该选项需要现有存储库,因为它具有writing the object into the git database的副作用。

证明:

-w

但是,由于你的最终目标是获得两个给定字符串之间的git hash-object,如果你想在$ echo "my first string" | git hash-object -w --stdin fatal: Not a git repository (or any parent up to mount point /home) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). $ echo "my first string" | git hash-object --stdin 3616fdee3ac48e5db02fbf9d5e1c2941cfa3e165 1 的帮助下完成它,你必须拥有一个git存储库。 SUP>。为此,您可以生成临时空存储库:

git diff

这种方法可以打包成一个bash函数:

git hash-object

<强>用法

$ tmpgitrepo="$(mktemp -d)"

$ git init "$tmpgitrepo"
Initialized empty Git repository in /tmp/tmp.MqBqDI1ytM/.git/

$ (export GIT_DIR="$tmpgitrepo"/.git; git diff $(echo "my first string" | git hash-object -w --stdin) $(echo "my second string" | git hash-object -w --stdin)  --word-diff)
diff --git a/3616fdee3ac48e5db02fbf9d5e1c2941cfa3e165 b/2ab8560d75d92363c8cb128fb70b615129c63371
index 3616fde..2ab8560 100644
--- a/3616fdee3ac48e5db02fbf9d5e1c2941cfa3e165
+++ b/2ab8560d75d92363c8cb128fb70b615129c63371
@@ -1 +1 @@
my [-first-]{+second+} string

$ rm -rf "$tmpgitrepo"

示例

git-diff-strings()
(
    local tmpgitrepo="$(mktemp -d)"
    trap "rm -rf $tmpgitrepo" EXIT
    git init "$tmpgitrepo" &> /dev/null
    export GIT_DIR="$tmpgitrepo"/.git
    local s1="$1"
    local s2="$2"
    shift 2
    git diff $(git hash-object -w --stdin <<< "$s1") $(git hash-object -w --stdin <<< "$s2") "$@"
)

1 请注意,您可以通过创建包含这些字符串的2个临时文件来git-diff-strings <string1> <string2> [git-diff-options] 两个字符串,在这种情况下,您不需要git存储库。

答案 1 :(得分:1)

@ danday74我无法根据您的反馈撰写评论(由于StackOverflow的权限),所以这是我的答案。您可以设置环境变量using declared permissions: android.permission.INTERACT_ACROSS_USERS_FULL: prot=normal requested permissions: android.permission.BIND_NOTIFICATION_LISTENER_SERVICE android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_LOGS User 0: ceDataInode=393939 installed=true hidden=false suspended=false stopped=false notLaunched=false enabled=0 gids=[1007] runtime permissions: android.permission.CLEAR_APP_USER_DATA: granted=true android.permission.INSTALL_PACKAGES: granted=true android.permission.READ_EXTERNAL_STORAGE: granted=true android.permission.INTERACT_ACROSS_USERS_FULL: granted=true android.permission.READ_LOGS: granted=true android.permission.CLEAR_APP_CACHE: granted=true android.permission.WRITE_EXTERNAL_STORAGE: granted=true 。如果您在多台计算机上执行此操作(您需要能够在此类计算机上设置此变量),那么您将能够可靠地设置GIT_DIR

希望这会有所帮助。