I want to execute the following command on a remote server:
git archive --prefix="$tag/" --remote="ssh://$gitserver/var/git/$repo" "$tag" | tar -xvf-
The problem is I don't know what $tag
is. It should be the output of git describe --abbrev=0
on an up-to-date clone, but I don't know how to get that information without making a local clone of the repository. Is it possible to do this without making a local clone?
To view your remote branches, simply pass the -r flag to the git branch command. You can inspect remote branches with the usual git checkout and git log commands. If you approve the changes a remote branch contains, you can merge it into a local branch with a normal git merge .
The default name (also known as an alias) for that remote repo is origin. If you've copied a project from Github, it already has an origin. You can view that origin with the command git remote -v, which will list the URL of the remote repo.
Git is a DevOps tool used for source code management. It is a free and open-source version control system used to handle small to very large projects efficiently. Git is used to tracking changes in the source code, enabling multiple developers to work together on non-linear development.
A remote in Git is a common repository that all team members use to exchange their changes. In most cases, such a remote repository is stored on a code hosting service like GitHub or on an internal server. In contrast to a local repository, a remote typically does not provide a file tree of the project's current state.
#!/usr/bin/awk -f
BEGIN {
FS = "[ /^]+"
while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) {
if (!sha)
sha = substr($0, 1, 7)
tag = $3
}
while ("curl -s " ARGV[1] "/releases/tag/" tag | getline)
if ($3 ~ "commits")
com = $2
printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha
}
Sample output
$ git-describe-remote.awk https://github.com/stedolan/jq
jq-1.4-148-g89791a0
The only way you could start parsing for your tag, without adding too much to your local disk, would be:
git fetch --dry-run
That will load the pack files of the remote repo, though.
I don't think you can just query this information without downloading something.
I have done it for a gitolite repo for instance:
VonC@NETVONC /c/prog/git
$ git init g2
Initialized empty Git repository in c:/prog/git/g2/.git/
VonC@NETVONC /c/prog/git
$ cd g2
VonC@NETVONC /c/prog/git/g2 (master)
$ git remote add origin https://github.com/sitaramc/gitolite.git
VonC@NETVONC /c/prog/git/g2 (master)
$ git fetch --dry-run
remote: Counting objects: 5114, done.
remote: Compressing objects: 100% (1919/1919), done.
remote: Total 5114 (delta 3548), reused 4664 (delta 3142)
Receiving objects: 100% (5114/5114), 1.81 MiB | 722 KiB/s, done.
Resolving deltas: 100% (3548/3548), done.
From https://github.com/sitaramc/gitolite
* [new branch] bp-v2.0.3 -> origin/bp-v2.0.3
* [new branch] fedora-temp -> origin/fedora-temp
* [new branch] gh-pages -> origin/gh-pages
* [new branch] master -> origin/master
* [new branch] pu -> origin/pu
* [new branch] temp-br--data-dumper-problem-demo -> origin/temp-br--data-dumper-problem-demo
* [new branch] vrs -> origin/vrs
* [new tag] v2.1 -> v2.1
From https://github.com/sitaramc/gitolite
* [new tag] v0.50 -> v0.50
* [new tag] v0.55 -> v0.55
[...]
* [new tag] v2.0rc2 -> v2.0rc2
* [new tag] v2.1 -> v2.1
^^^^
|
--- could be the tag you need
As mentioned above, the only traces are the pack files, so at least you can easily clean them once you have your information:
VonC@NETVONC /c/prog/git/g2 (master)
$ l .git/objects/pack/
total 1000
drwxr-xr-x 4 VonC Administ 0 Nov 8 19:45 ..
-r--r--r-- 1 VonC Administ 1898987 Nov 8 19:46 pack-c70771bc8a5ecc099ed88da0c3f631f84b34fe9d.pack
-r--r--r-- 1 VonC Administ 144264 Nov 8 19:46 pack-c70771bc8a5ecc099ed88da0c3f631f84b34fe9d.idx
drwxr-xr-x 2 VonC Administ 4096 Nov 8 19:46 .
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With