Re: Modifying a bare repo directly
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Apr 10, 2017, 10:33 UTC
- Message-ID
- <CACBZZX7aAHdrvH3wucoQYvZ26mNDYvo3ue4XR0TFF7BxBSWaxw@mail.gmail.com>
- In-Reply-To
- <CAG_DJYk3D=sPm6rhGRD_wF4dnJqSU_M+c=NWP4Q5ExBap_-kPw@mail.gmail.com>
On Mon, Apr 10, 2017 at 12:09 PM, Julian Goacher <julian.goacher@gmail.com> wrote:
Show 8 quoted lines
> Hi - > > Is it possible to modify a bare repo directly? e.g. is it possible to > insert a file into a bare repo without first cloning a non-bare copy? > I'm thinking along the lines of a command or sequence of commands that > modifies the file index and then copies the file blob into /objects, > but in a situation where the new file exists separately from the > target repo.
Yes you use the plumbing commands (see "man git", search for plumbing), e.g.:
git init --bare mybare.git cd mybare.git echo hello | git hash-object --stdin -w >obj $ printf "100644 blob $(cat obj)\thello.txt\n" | git mktree aaa96ced2d9a1c8e72c56b253a0e2fe78393feb7 $ git commit-tree -m "1st commit" aaa96ced2d9a1c8e72c56b253a0e2fe78393feb7 318448647ab7a2b1f78c87cb8a05ac0cf172fbb8 $ git show 318448647ab7a2b1f78c87cb8a05ac0cf172fbb8 commit 3184486 Author: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Date: Mon Apr 10 12:29:22 2017 +0200
1st commit
diff --git a/hello.txt b/hello.txt new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/hello.txt @@ -0,0 +1 @@ +hello $ git update-ref refs/heads/master 318448647ab7a2b1f78c87cb8a05ac0cf172fbb8 Now when you clone this repo you'll have that one commit.