When you do your first clone using the syntax
git clone username@server:gitRepo.git Is it possible using your local repository to find the name of that initial clone?
(So in the above example, find gitRepo.git.)
When you do your first clone using the syntax
git clone username@server:gitRepo.git Is it possible using your local repository to find the name of that initial clone?
(So in the above example, find gitRepo.git.)
git config --get remote.origin.url git remote show origin calls out to network.In the repository root, the .git/config file holds all information about remote repositories and branches. In your example, you should look for something like:
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = server:gitRepo.git Also, the Git command git remote -v shows the remote repository name and URL. The "origin" remote repository usually corresponds to the original repository, from which the local copy was cloned.
This is quick Bash command, that you're probably searching for, will print only a basename of the remote repository:
Where you fetch from:
basename $(git remote show -n origin | grep Fetch | cut -d: -f2-) Alternatively where you push to:
basename $(git remote show -n origin | grep Push | cut -d: -f2-) Especially the -n option makes the command much quicker.
basename doesn't care about the colon so no need to cut I think, and possibly simplifying to assume fetch/push are the same depending on your workflow - e.g. basename $(git config --get remote.origin.url) works fine for me.I stumbled on this question trying to get the organization/repo string from a git host like github or gitlab.
This is working for me:
git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/' It uses sed to replace the output of the git config command with just the organization and repo name.
Something like github/scientist would be matched by the character class [[:graph:]] in the regular expression.
The \1 tells sed to replace everything with just the matched characters.
git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil' It was tested with three different URL styles:
echo "Fetch URL: http://user@pass:gitservice.org:20080/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil' echo "Fetch URL: Fetch URL: [email protected]:home1-oss/oss-build.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil' echo "Fetch URL: https://github.com/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil' Edited for clarity:
This will work to to get the value if the remote.origin.url is in the form protocol://auth_info@git_host:port/project/repo.git. If you find it doesn't work, adjust the -f5 option that is part of the first cut command.
For the example remote.origin.url of protocol://auth_info@git_host:port/project/repo.git the output created by the cut command would contain the following:
-f1: protocol: -f2: (blank) -f3: auth_info@git_host:port -f4: project -f5: repo.git
If you are having problems, look at the output of the git config --get remote.origin.url command to see which field contains the original repository. If the remote.origin.url does not contain the .git string then omit the pipe to the second cut command.
#!/usr/bin/env bash repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)" echo ${repoSlug} protocol://git@git_host:7999/project/repo.git Adjust the -f5 down in that case.