Products Resources Support About Us

Git clone not working from remote

I did a few tests with git. Locally, all was fine.

One problem: when creating a bare repository on z/OS, and then trying to clone it from my laptop I get.
Cloning into ‘repos1’…
bash: git-upload-pack: command not found
fatal: Could not read from remote repository.

When showing the path with
ssh manfred@hostsystem ‘echo $PATH’

I get
/bin

which seems to be the compiled path on the sshd server side.

As a workaround I created symlinks of the git utilities in /bin but now I got

fatal: protocol error: bad line length character: ����

Perhaps I did a stupid mistake. If yes please enlighten me if not then my question: How do I configure the PATH variable so that I could clone from remote?


Thanks, Manfred

Hi, Manfred.

Git on z/OS does not work as a git server at this moment.

Regards,
Andrey

Hi Andrey, thanks for the info.

Manfred, I was having the same problem. I finally worked out how to get past that problem.

I did not want to put all the git programs into the /bin programs. So the problem was how to get the the path changed in a non-login non-interactive shell (which is what gets generated to handle the request). /etc/profile and ~/.profile only get invoked from a login shell, so I couldn’t use those to set the path. .bashrc only gets invoked from a non-login interactive shell, so it did not do the trick by itself either.

What I ended up needing to do was first modify the /etc/ssh/sshd_config file to uncomment and set

PermitUserEnvironment yes

which then allows you to have a ~/.ssh/environment file which contains

BASH_ENV=~/.bashrc

so now in a non-login non-interactive shell, you can get the ~/.bashrc (or any other script you put in the BASH_ENV variable above) to execute.

In my ~/.bashrc I have

export PATH=/usr/local/git/bin:$PATH

which now got me access to the executables.

Problem 1 solved, but I’m still running into a second problem that I have not overcome yet, perhaps because the product is not ready to run as a server yet.

From my git repository on my windows machine I run

git remote add myZOS ssh://myUser@myZOS.mydomain.com/u/myUser/mygit/myProduct
git pull myZOS

and get a response of

fatal: protocol error: bad line length character: ▒▒▒
Unable to write to standard output: The pipe is being closed.

This often is related to a problem with a response of some error, so I used

ssh myUser@myZOS.mydomain.com git-receive-pack /u/myUser/mygit/myProduct

to verify. I was having a problem with the public key, Once I fixed that, I now get

fatal: protocol error: bad line length character:

followed by some junk… I haven’t gotten past that yet.

Hi Tim,
In the end you are stuck where I was stuck, namely:
fatal: protocol error: bad line length character:

z/OS git does not currently work as a git server. It can pull from or push to other git servers, but not the other way around.

I am getting the error when also trying to clone my local repo. Should I think this because the same reason that z/OS git does not currently work as a server. If so, should I think “git clone” is a dummy command in z/OS git (at least for now.)

command: git clone /u/ttg/coderepo/project1/.git /u/ttg/coderepo/project2
error: cannot run git-upload-pack ‘/u/ttg/coderepo/project1/.git’: EDC5129I No such file or directory.
fatal: unable to fork

command: git clone /u/ttg/coderepo/project1 /u/ttg/coderepo/project2
error: cannot run git-upload-pack ‘/u/ttg/coderepo/project1’: EDC5129I No such file or directory.
fatal: unable to fork

cloning locally works fine for me

I have also tested cloning a local repo, and it works for me.

If you just type “git-upload-pack” at the command prompt, what happens? The message you are getting seems to suggest that git-upload-pack isn’t being found.

1 Like

Hello.
When I type only git-upload-pack, the following message I get. I think it can’t find the repository, not the command itsef. I think i have made a mistake in installation. I am going to reinstall this time into my own users folder (/u/myuser) instead of /u/ptools/zosgit and try again.

myuser:/u/ttg/coderepo/project1: >git-upload-pack
usage: git upload-pack [–strict] [–timeout=]

Hello Manfred.
Can you give a sample git clone command you use for local clone. You mean from one directory in your local directory into another folder again in your directory? Or cloning a remore repository into a zos git folder…

Thanks in advance.

Here is a shell session showing both a remote and local clone on z/OS. These same commands should work for you (assuming you have an account on github and ssh key configured):

bash-2.03$ uname
OS/390
bash-2.03$ git clone git@github.com:zorts/hello_world.git
Cloning into 'hello_world'...
bash-2.03$ cd hello_world/
bash-2.03$ make
cc -c -o hello.o hello.c
cc -o hello hello.o
./hello
Hello, world!
This command is ./hello, and it has 0 arguments
./hello with some arguments
Hello, world!
This command is ./hello, and it has 3 arguments
[1]: with
[2]: some
[3]: arguments
bash-2.03$ cd ..
bash-2.03$ git clone hello_world new_hello_world
git clone hello_world new_hello_world
Cloning into 'new_hello_world'...
done.
bash-2.03$ cd new_hello_world/
bash-2.03$ make
cc -c -o hello.o hello.c
cc -o hello hello.o
./hello
Hello, world!
This command is ./hello, and it has 0 arguments
./hello with some arguments
Hello, world!
This command is ./hello, and it has 3 arguments
[1]: with
[2]: some
[3]: arguments
bash-2.03$

bash-2.03$ git clone hello_world new_hello_world

Should I open a seperate bash shell? I am connecting directly via putty, and using git commands. What I didn’t understand is other gir commands like init, add, status … works fine but git clone has driven me crazy. Whatever, thank you very much for your help but i think I got too much time of yours. Sorry for this.

Hello my problem is resolved when i tried with a clean directory which i created manually. I think the problem was related with my files in the repo. Thank you very much for this exciting tool in zos.

2 Likes

A bit late but here it is.

Cloning locally: git clone /mygit/x.git. Directory x will be created containing the clone of x.git

Or from gitlab: git clone git@gitlab.com:Lotz/manfred.git which works fine as well.

1 Like

Is it planned to support git as a server on z/OS UNIX?

– Manfred

HI, Manfred. We do not currently plan to support git as a server on z/OS.

Hi Jerry,
Thanks for the reply.

I’m not currently sure if I would regard such a support terribly urgent as of course one could have a repository at github, gitlab or company internal github server. Then one could just clone from there.
– Manfred

I stumbled onto this thread as I too was unsuccessfully trying to clone a repo from zOS git and I’m glad the lack of support was mentioned here as I can now move on to other tasks.

I would like to mention though that the concept of using zOS git as a server is a powerful one. Using zOS git as a client limits the user to using only zOS supported editing tools which imposes hurdles when it comes to working a language like Java which is supported by the powerful Eclipse IDE.

A hypothetical scenario that server support would allow is where a Java developer could clone a zOS git repo into Eclipse as a project and develop/debug Java code locally, then push to the remote on zOS, compile and run. I think this functionality would only further promote/demonstrate mainframe modernization.

This scenario is of course still possible with an intermediate remote on a supported platform but adds an unnecessary extra step to the development process and requires extra overhead/infrastructure.

Just my two cents.

-Matt

Hi, Matt. I hear what you’re saying, but support for git as a server on z/OS is just not a high priority for us at this time.This has to do with the specifics of how ssh works on z/OS, and the need to port other libraries to z/OS to be able to support the other git protocols. It turns out to be a difficult problem.

In addition, systems layered on top of git (such as github and BitBucket) provide very high-value functionality (notably pull requests and code review tools) that most git users will want anyway. We certainly use that functionality internally at Rocket.