开发者

execute git command inside bash script

开发者 https://www.devze.com 2023-03-08 11:26 出处:网络
I am writing gitosis post-push hook for central repository which pulls updates from central repository to testing enviroment

I am writing gitosis post-push hook for central repository

which pulls updates from central repository to testing enviroment

nano /var/git/repositories/holding.git/hooks/post-update

 #!/bin/bash

 cd /var/vh/holding;
 git 开发者_开发技巧reset --hard;
 git checkout testing;
 git pull;

here what I get after push on my client (development VM)

# blah ...
Counting objects: 57, done.
Compressing objects: 100% (24/24), done.
Writing objects: 100% (30/30), 3.42 KiB, done.
Total 30 (delta 18), reused 0 (delta 0)
fatal: Not a git repository: '.'
fatal: Not a git repository: '.'
fatal: Not a git repository: '.'
fatal: Not a git repository: '.'
To git@cheby.ru:holding.git
   233b5a2..0f46cd8  testing -> testing

Obviously, my attempt to tell git, where it should do pull, failed.

What is correct way to run git command for a specified working copy in bash script?


As mentioned here or there, you could precede all your git commands with:

 env -i

in order to make sure there is no side effect with, for instance, a GIT_DIR environment variable which could have been previously set.
(env -i or simply: unset GIT_DIR)


For me, preceding with env -i does not work. I always get this error:

*** Please tell me who you are.

Although I've set the global config. This is what works for me by specifying --git-dir parameter:

#!/bin/sh

GIT='git --git-dir='$PWD'/.git'

$GIT checkout hotfix
$GIT merge --no-ff master -m "Merged master"
$GIT push

I run the script inside the working directory hence I use $PWD to get current working directory. You may adjust as necessary.


Is /var/vh/holding a git repository? i.e. have you run git init on it, set up your remotes, set it to track your holding.git directory, etc.? Also, if you're not pulling from the same repo you're pushing to, you shouldn't need the reset and checkout.


We can use the --git-dir parameter to specify the path to .git.

For example: we can call git log like this:

git --git-dir=<path to git cloned dir>/.git log
0

精彩评论

暂无评论...
验证码 换一张
取 消