我正在使用Git,我希望在克隆到本地存储库的Git服务器上获取特定文件的完整路径。
实施例: 本地仓库中的文件是:
/home/.../source/android/frameworks/av/media/libstagefright/CameraSource.cpp
我想在Git服务器上获取此文件的链接,如下所示:
https://android.git.sec..../plugins/gitiles/platform/frameworks/av/+/refs/heads/main/o-one/media/libstagefright/CameraSource.cpp
如何在Linux上使用Bash命令执行此操作?
答案 0 :(得分:2)
这是一个很长的自定义脚本,可用于任何远程https://github.com
托管存储库。我会尽快修改它,因为它可能容易出现边缘情况错误。
要实现此功能,请将代码段保存到git_relative.sh
文件并将其放在任何位置,现在将其放在~/
主目录中。
现在通过添加此行来修改您的~/.bashrc
或~/.zshrc
或~/.bash_profile
的 alias git_remote_path='source ~/git_relative.sh'
强>
重新启动终端或执行添加此内容的相应bash脚本。然后转到任何git存储库并执行git_remote_path
。这将打印git远程服务器中的完整路径。
您提供的示例似乎与传统的 github.com
有不同的远程网址。为了使其正常工作,只需更改我在评论中指定的行。
注意:该脚本适用于https://github.com
远程网址,如果您想获取自定义网址的路径,则需要稍微修改一下代码以满足存储库的需求网址约定。一个示例作为注释包含在摘录中。
is_git=false
relative_to_git=""
check=""
initial=$(pwd)
current_dir=""
count=0
if [ ! $(git rev-parse --is-inside-work-tree 2> /dev/null) ]; then
echo "NOT INSIDE A VALID GIT REPOSITORY"
return
fi
git_remote=$(git config --get remote.origin.url)
git_remote=${git_remote%.git}
git_branch=$(git rev-parse --abbrev-ref HEAD)
while [ $is_git=true ]
do
if [ -d ".git" ]; then
break
fi
current_dir=${PWD##*/}
relative_to_git="$current_dir/$relative_to_git"
cd ../
done
# echo "$git_remote/+/$git_branch/$relative_to_git"
# For andoid.googlesource.com uncomment the above and comment the below lines
echo "$git_remote/tree/$git_branch/$relative_to_git"
cd $initial
答案 1 :(得分:1)
对于github URL,下面的脚本也适用于我。
#!/bin/bash
#get REPO top level dir
REPO=`git rev-parse --show-toplevel`
if [[ $? -ne 0 ]]
then
echo "Not in git repo"
exit 1
fi
git_branch=`git rev-parse --abbrev-ref HEAD 2>/dev/null`
#get relative path
relative_path=`git rev-parse --show-prefix|sed "s/\/$//"`
GIT_REMOTE_URL_UNFINISHED=`git config --get remote.origin.url|sed -s "s/^ssh/http/; s/git@//; s/.git$//;"`
GIT_REMOTE_URL="$(dirname $GIT_REMOTE_URL_UNFINISHED)/$(basename $GIT_REMOTE_URL_UNFINISHED)/$relative_path"
echo $GIT_REMOTE_URL
if [[ $git_branch != "master" ]]
then
#if the feature branch name contains "/", transform it as per URL Encoding
git_branch_in_url=`echo $git_branch| sed 's/\//%2F/g'`
echo "Feature Branch URL"
echo "${GIT_REMOTE_URL}/tree/$git_branch_in_url"
fi