Managing personal and organisation GitHub accounts on the same machine(HTTPS) - macos

So i have a mac given to me by organistaion for company work. My mac os verison is macOS Monterey version 12.6
Now i have one github account setup here for my company (2FA enabled and using HTTPS with Personal access token)
git version 2.37.0 (Apple Git-136)
Adding .git/config file output here (local file inside repo path).
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/<<company_name>>/<<repo_name>>.git
fetch = +refs/heads/*:refs/remotes/origin/*`
Adding global config file output (~/.gitconfig)
[credential]
helper = osxkeychain
[url "https://company_username#github.com"]
and inside keychain there are two enteries for github.com
Internet password
application password
Both having my personal access token for the company id.
This all works fine as PAT is saved in keychain.
Now i have created a new github account under my name (for personal projects) and following is the local .git/config file output there.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[user]
name = <<personal_username>>
email = <<personal_email_id>>
[remote "origin"]
url = https://<<PAT>>#github.com/<<personal_username>>/<<repo_name>>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[credential]
helper =
i have added PAT here so that it does not copies the one from keychain (as i tried different solutions online)
However, when i try to clone or push in this repo it gives error.
remote: Repository not found.
fatal: repository 'https://github.com/<<personal_user>>/<<repo>>.git/' not found
what i understand is it is taking PAT from keychain and that one is for my company's PAT so giving this error. However i might be wrong.
Adding output for my .netrc
machine github.com login <<company_username>> password <<company_PAT>>
I am able to think of two ways to do this
enable keychain for only company's repo and not for personal repo so that i can add PAT personal each time
Add different PAT for different account in keychain
However i am not able to come up with any solution after trying everything online.
Again, i am using HTTPS
(most of solution online are .SSH)
Thank you in advance.

https://<<PAT>>#github.com: you do not put the token when you work with credential helper.
You put your GitHub user account, the one you need to access that repository.
And you record in the credential helper the right PAT for that user.
I would recommend installing the Microsoft cross-platform GCM (Git Credential Manager), which will update osxkeychain.
Then record your personal user account and associated PAT:
printf "host=github.com\nprotocol=https\nusername=you\npassword=PAT" | git credential-manager store
# replace 'you' and 'PAT' with your own GitHub account and token
Using https://you#github.com/... (instead of https://company_username#github.com)will force Git to extract the right token from the credential helper.

Related

Poetry: changing to private pypi repository on the command line

Locally, we use a private source URL for our poetry configurations, and the credentials will be found in our pip.ini. However, in our CI/CD pipeline we obtain a secret which changes the PIP_EXTRA_INDEX_URL. This is not enough, because we need to change the pyproject.toml (see below) with this URL.
[[tool.poetry.source]]
name = "private"
url = "https://someplace.pkgs.visualstudio.com/_packaging/somewhere/pypi/simple/"
secondary = true
This is not changed with poetry config repositories.private "$PIP_EXTRA_INDEX_URL". How should we change this then?
You can just the link without the credentials and specify the login like this:
poetry config repositories.someplace https://someplace.pkgs.visualstudio.com/_packaging/somewhere/pypi/
poetry config http-basic.someplace someuser $(personal-access-token)

Aws Ruby SDK credentials from file

I would like to store my credentials in ~/.aws/credentials and not in environmental variables, but I am struggling.
To load the credentials I use (from here)
credentials = Aws::SharedCredentials.new({region: 'myregion', profile_name: 'myprofile'})
My ~/.aws/credentials is
[myprofile]
AWS_ACCESS_KEY = XXXXXXXXXXXXXXXXXXX
AWS_SECRET_KEY = YYYYYYYYYYYYYYYYYYYYYYYYYYY
My ~/.aws/config is
[myprofile]
output = json
region = myregion
I then define a resource with
aws = Aws::EC2::Resource.new(region: 'eu....', credentials: credentials)
but if I try for example
aws.instances.first
I get the error Error: #<Aws::Errors::MissingCredentialsError: unable to sign request without credentials set>
Everything works if I hard code the keys
According to the source code aws loads credentials automatically only from ENV.
You can create credentials with custom attributes.
credentials = Aws::Credentials.new(AWS_ACCESS_KEY, AWS_SECRET_KEY)
aws = Aws::EC2::Resource.new(region: 'eu-central-1', credentials: credentials)
In your specific case, it seems there is no way to pass custom credentials to SharedCredentials.
If you just do
credentials = Aws::SharedCredentials.new()
it loads the default profile. You should be able to load myprofile by passing in :profile_name as an option.
I don't know if you can also override the region though. You might want to try to loose that option, see how it works.

jhbuild build throwing 407 authentication error

I'm trying to install jhbuild. When I give jhbuild build command it gives me error -
jhbuild build: could not download https://git.gnome.org/browse/jhbuild/plain/modulesets/gnome-apps-3.18.modules: <urlopen error Tunnel connection failed: 407 Proxy Authentication Required>
I'm behind a college proxy and Ubuntu 14.04. How do I find a way around this problem?
Probably your college proxy has some kind of authentication. Put the correct proxy settings in environment by adding this
export http_proxy="http://[username]:[password]#[proxy.server.com]:[port]"
export https_proxy="http://[username]:[password]#[proxy.server.com]:[port]"
in your .bashrc or any other init configuration files. Even after if it shows the same error, I came across a good tool proGY (An intermediate proxy authenticator).
Also you will have to set your proxy url as above in git config also
git config --global http.proxy http://[username]:[password]#[proxy.server.com]:[port]
git config --global https.proxy http://[username]:[password]#[proxy.server.com]:[port]
If you college doesn't have other open ports as git protocol uses it, you should explicitly say jhbuild to use http:// git clone urls instead of git:// clone URLS.
repos['git.gnome.org'] = 'https://git.gnome.org/browse/'
repos['git.freedesktop.org'] = 'http://anongit.freedesktop.org/git/'
repos['wayland.freedesktop.org'] = 'http://anongit.freedesktop.org/git/wayland'
repos['gstreamer.freedesktop.org'] = 'http://anongit.freedesktop.org/git/gstreamer'
repos['pulseaudio.freedesktop.org'] = 'http://anongit.freedesktop.org/git/pulseaudio'
repos['telepathy.freedesktop.org'] = 'http://anongit.freedesktop.org/git/telepathy'
repos['modemmanager.freedesktop.org'] = 'http://anongit.freedesktop.org/git/ModemManager'
repos['git.savannah.nongnu.org'] = 'http://git.savannah.gnu.org/r/'
repos['github.com'] = 'https://github.com/'
in your jhbuildrc file (in ~/.config/jhbuildrc)

Problems SourceTree listing files in local repository as deleted

We are two developers working on a large project which involves 30 small satelllite web sites from two differente stations. We have been experiencing problems with SourceTree in the sense that sometimes in the OSX station the area "Work Copy Changes" lists many files as deleted and reques
A. Main issue:
Sometimes, before committing or pushing any changes on the repository, on the MAC station SourceTree shows on the working changes area that many files have been deleted. But when we check if the files still exist on the project folder of the MAC, they are still there.
We cannot proceed to pull or pushing any more changes until we go file by file ignoring the changes for each file or we make another commit confirming the deletion of the files.
This seems to be happening erratically when one of us pushes changes onto the repository.
Although we don’t know if it may be related to this, another issue that has been happening as well is that the folders requested to be ignored on the gitignore file are not ignored.
B. Configuration
A Samsung laptop running on Windows 7 and a MAC with OSX
For managing (pushing, pulling, committing) contents on the repository, we are using the latest versions of SourceTree (1.5.2 for Windows and 1.9 for OSX)
We are using the same software for development (PhpStorm)
We are using one master repository and branch for managing all the changes on the satellites
The configuration of the GIT config files is below:
Windows station:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
url = dlaggit#dev.dreamit.de:lotto-satellites
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
OSX station:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = false
[remote "origin"]
url = dlaggit#dev.dreamit.de:lotto-satellites
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
C. What we have tried so far
Discarding the changes on the files. The problem has arisen again weeks later with different files
Reinstalling SourceTree and making the changes below (highlighted) to the git config file on the OSX machine:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = dlaggit#dev.dreamit.de:lotto-satellites
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
After trying the solution above, some of the files on the working copy changes area no longer appear as deleted but as modified (even though they had not been modified by us), some of them appear recently added and some remain as deleted. When we check the files in the local folder, the files are still there.
Thanks for any help you can provide.

git, strange upstream entry which i cant get rid of

if i do
git remote -v
i get
origin https://..../foo.git (fetch)
origin https://..../foo.git (push)
upstream
this last upstream line there prevents me from adding a real upstream which i wanna merge from.
my config file looks like this:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
url = https://..../foo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
when i do
git fetch upstream
i get this error:
fatal: 'upstream' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
how can i get rid of that upstream?
Git has several scopes where config is set : system ($(prefix)/etc/gitconfig), global (~/.gitconfig) and local (.git/config of the current repository).
Since there is nothing about upstream in your local scope, you have to check the system and global scopes. It could simply be a write access permission to associated files.

Resources