如何在Git远程仓库中获取文件的完整路径

时间:2017-11-28 05:42:28

标签: git bash

我正在使用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命令执行此操作?

2 个答案:

答案 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