prydonius / karn

Manage multiple Git identities
MIT License
304 stars 7 forks source link

how do you run it? #33

Open CouldBeThis opened 2 years ago

CouldBeThis commented 2 years ago

Hi, Sorry for the stupid question. But how does one run this? I have not worked with go applications much and not at all on this machine so I installed golang from synaptic; I don't know if it's like python or ruby where you have to massage the environment sometimes; maybe I am just missing a component.

Below is what I did if it's of any interest (may not be) but what I am really hoping for is to learn:

  1. what are the dependencies, environment requirements etc? I have go version go1.10.4 linux/amd64; is it sufficient?
  2. how are you supposed to invoke it? presumably something needs to get put on the path..? I'm missing the step.

Any hints appreciated! :) Thank you for making and sharing a program to deal with this very tenacious problem in git.


Anyway first I tried installing via Go:

$ go get github.com/prydonius/karn/cmd/karn

# github.com/prydonius/karn/cmd/karn
go/src/github.com/prydonius/karn/cmd/karn/karn.go:16:5: app.Author undefined (type *cli.App has no field or method Author)
go/src/github.com/prydonius/karn/cmd/karn/karn.go:17:5: app.Email undefined (type *cli.App has no field or method Email)
go/src/github.com/prydonius/karn/cmd/karn/karn.go:19:15: cannot use commands() (type []cli.Command) as type []*cli.Command in assignment
go/src/github.com/prydonius/karn/cmd/karn/karn.go:28:10: cannot use func literal (type func(*cli.Context)) as type cli.ActionFunc in field value
go/src/github.com/prydonius/karn/cmd/karn/karn.go:35:10: cannot use func literal (type func(*cli.Context)) as type cli.ActionFunc in field value
go/src/github.com/prydonius/karn/cmd/karn/karn.go:42:10: cannot use func literal (type func(*cli.Context)) as type cli.ActionFunc in field value

so I downloaded the binary but not sure what to do with any of these files. looked online for how to run golang programs and this was suggested:

$ go run karn.go
go run: cannot run non-main package

Looked into that error code and couldn't find anything that made sense.

Tried running it like anything else,

$ ./karn.go 
zsh: permission denied: ./karn.go

so gave some permissions:

$ chmod +x karn.go 
./karn.go       
./karn.go: package: not found
./karn.go: Syntax error: newline unexpected (expecting ")")

And I gave up. :)

seltzered commented 12 months ago

Did you first setup a karn.yml file per the readme in your home directory?

Generally it should work assuming you have karn.yml setup properly (you do also need signing keys currently setup until #31 is fixed). You may also need to make sure all identities are in your ~/.gitconfig

You can also try karn update if really needed, and you can check the email/name/etc. by cd'ing into the directory and doing:

git config user.name git config user.email

If you need to refresh things you may want to try ssh-add -D (via https://stackoverflow.com/a/38583330/314780 )

Furthermore, when checking out a repo for a different identity you may need to specify the user git remote add origin git@github-doe-company:username/repo.git (via https://stackoverflow.com/a/68025589/314780 )

All this said, it's worth noting there may be other options these days now that git itself supports conditional includes - see https://stackoverflow.com/a/43654115/314780 -> https://git-scm.com/docs/git-config#_conditional_includes

CouldBeThis commented 10 months ago

Hi, thanks for following up. I must admit that I gave up on using this. But like you mention, git itself has been improving the built in functionality for multiple credentials. Also I am sloowly learning how to better use it. Between those factors I am mostly able to manage manually.

The one thing I can't do is clone a private repo. Because the git includes only apply when you are already in a repo. Is this application able to handle that situation?

It looks like I was still using Ubuntu when I made this issue. But now I have access to AUR so probably can bypass whatever the go problems were and install properly via system package manager the way god intended.

seltzered commented 10 months ago

I also stopped using Karn and now just use .gitconfig files (Karn worked, but for some odd reason it started asking for other identity permissions and wanted a simpler setup).

Cloning a private repo should depend more on your adding the identity when cloning: https://github.com/git-ecosystem/git-credential-manager/blob/main/docs/multiple-users.md#example-fresh-clones