Bash 通过一个命令创建新文件并将其添加到git版本控制

Bash 通过一个命令创建新文件并将其添加到git版本控制,bash,git,shell,Bash,Git,Shell,git中是否有一种方法可以完成与2个shell命令相同的操作: touch somefile git add somefile 在一个命令中?git add将文件从工作树复制到索引中。此过程要求文件存在git add将在索引中使用相同的名称 从技术上讲,git add实际上包括两个步骤: 它必须在存储库数据库中创建或查找包含文件内容的blob对象。如果文件为空,则进入数据库或已在数据库中的对象具有以下哈希: $ git hash-object -t blob --stdin < /dev

git中是否有一种方法可以完成与2个shell命令相同的操作:

touch somefile
git add somefile

在一个命令中?

git add
将文件从工作树复制到索引中。此过程要求文件存在
git add
将在索引中使用相同的名称

从技术上讲,
git add
实际上包括两个步骤:

  • 它必须在存储库数据库中创建或查找包含文件内容的blob对象。如果文件为空,则进入数据库或已在数据库中的对象具有以下哈希:

    $ git hash-object -t blob --stdin < /dev/null
    e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
    
    $git散列对象-t blob--stdin
    您可以通过运行带有
    -w
    标志的
    git hash object
    来模拟这一点,该标志告诉git在需要时将对象写入数据库,然后返回表示这些内容的hash ID

  • 既然对象已经在数据库中(如果需要,可以新编写),并且我们已经有了它的散列ID,
    git add
    继续更新索引。此更新包括删除任何具有相同名称的更高阶段条目,并写入阶段零条目。如果文件应标记为读/写,则条目内容为文件的所需模式
    100644
    ;如果文件应标记为读/写/执行,则条目内容为
    100755
    、阶段编号(零)、blob哈希ID和路径(表示为UTF-8字符串)

  • 您可以使用
    git update info
    完成第二步,可以使用
    --index info
    (从标准输入读取)或
    --cacheinfo
    (仅限于写入stage zero条目,但这正是您想要的)。有关详细信息,请参阅

    这样做而不是
    触摸文件的问题;git add file
    是指,除非您已经知道内容的哈希ID,并且该哈希ID实际上已经存在于git数据库中,否则它仍然需要两个命令:
    git hash object-w…
    git update index…
    。在这种情况下,您最好使用easy命令


    (请注意,虽然所有存储库都有空blob,但它们最初并没有空blob。)

    在文件中写入时,目标是什么?您尝试的内容没有意义…可能是一个看门狗脚本,当它检测到更改时,会触发git add somefile
    ?或者
    触摸somefile&&git add somefile
    ,如果这仅仅是在一次提交中完成的问题。您可以第一个编写一个;)。没有。Git跟踪现有文件,并且没有创建新文件的规定。