V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DjvuLee
V2EX  ›  程序员

分享一个 MacOS 小工具 gopen - 快速打开 Git 仓库远程 URL

  •  
  •   DjvuLee · 126 天前 · 1954 次点击
    这是一个创建于 126 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在命令行里面经常需要在浏览器里面打开 github 上的 repo ,这个对外来说非常高频,我希望像操作系统里面的 open 命令一样简单。

    使用过各种小工具都不方便,比如官方的 gh, 都不方便。就自己开发了一个,分享给有需要的同学吧 https://github.com/libratiger/gopen

    功能

    • 自动打开远程 URL:从当前目录或指定目录的 Git 仓库中提取远程 URL ,并在浏览器中打开。
    • SSH 转换为 HTTPS:自动将 SSH URL 转换为 HTTPS URL ,以便在浏览器中访问。
    • 交互模式:支持用户通过交互界面选择要打开的多个远程 URL 中的某一个。
    • 目录指定:用户可以指定一个目录,从该目录下查找并打开远程 URL 。

    安装

    你可以通过 Homebrew 安装 gopen

    brew tap libratiger/homebrew-tap
    brew install gopen
    

    使用方法

    默认模式

    在当前 Git 仓库目录中运行 gopen,它会自动打开第一个远程 URL 。

    gopen
    

    指定目录

    在指定目录下查找并打开远程 URL 。

    gopen /path/to/git-repo
    

    交互模式

    使用 -i 参数进入交互模式,用户可以选择要打开的远程 URL 。

    gopen -i
    

    或在指定目录下使用交互模式:

    gopen /path/to/git-repo -i
    
    20 条回复    2024-07-13 00:32:03 +08:00
    GPT6
        1
    GPT6  
       126 天前
    powershell


    # 打开当前仓库
    Function gopen {
    # 获取所有远程仓库的名称和地址
    $remoteRepositories = git remote -v | ForEach-Object {
    $remote = $_ -split '\s+'
    [PSCustomObject]@{
    Name = $remote[0]
    Url = $remote[1]
    }
    }

    # 去重远程仓库地址
    $uniqueRemoteRepositories = $remoteRepositories | Select-Object -Property Url -Unique

    # 输出所有远程仓库的名称和地址
    $uniqueRemoteRepositories | ForEach-Object {
    Write-Host "Remote repository URL: $($_.Url)"
    Start-Process $_.Url
    }
    }
    DjvuLee
        2
    DjvuLee  
    OP
       126 天前
    @GPT6 本身不复杂,就是几行脚本的事情,但是这个事情我感觉对应程序员还是很高频的。我刚更新了一个 rust 的版本
    dHenryDong
        3
    dHenryDong  
       126 天前
    用 omz 配个插件就完事儿了 https://github.com/paulirish/git-open.git
    noahlias
        4
    noahlias  
       126 天前
    gh repo view --web
    直接用 github 官方 cli 就好了
    xingheng
        5
    xingheng  
       126 天前
    DjvuLee
        6
    DjvuLee  
    OP
       126 天前
    @noahlias 之前就是用的这个,感觉太难用了。我其实就希望直接用苹果自带的 open 命令就好了.
    DjvuLee
        7
    DjvuLee  
    OP
       126 天前
    @dHenryDong 和这个差不多,但是我希望提供一点交互式的界面
    DjvuLee
        8
    DjvuLee  
    OP
       126 天前
    @xingheng 看过这个,这个工具想要做的东西太多了
    noahlias
        9
    noahlias  
       126 天前
    @DjvuLee 这个还难用啊?
    说实话这种其实有很多其他的方式代替 感觉都很方便
    1:选择一个好的终端模拟器支持 URL 鼠标点击 比如 kitty 直接 git remote -v 点击打开就行
    2: 用 tmux-fzf-url 直接当前 buffer 选择打开 或者编辑当前 buffer 用 vim/neovim gx 打开
    3: 一个管道命令 `git remote -v | awk '{print $2}' | sort -u | fzf | xargs open` 用 git+fzf+open(其他系统换成不同的) 命令就解决了
    DjvuLee
        10
    DjvuLee  
    OP
       126 天前
    我之前是选择的方法 1 ,我今天终于忍受不了
    DjvuLee
        11
    DjvuLee  
    OP
       126 天前
    @noahlias gh 的命不容易记啊,也没有补齐,没有交互。
    noahlias
        12
    noahlias  
       126 天前
    @DjvuLee gh 有 completion 啊 gh completion 不就是吗
    有 zsh/bash/fish 看看官方文档或者 help
    Donaldo
        13
    Donaldo  
       126 天前
    👍确实是个高频需求,我有个小建议,名字改成 gg ,哈哈。
    Wxh16144
        14
    Wxh16144  
       126 天前
    感觉还是 GitHub 官方的 CLI 香啊, 我设置了一个别名 gh ob(erver) 的意思。

    GitHub CLI: https://cli.github.com/

    ![image.png]( https://s2.loli.net/2024/07/12/85g627NyUpk3Ixt.png)
    DjvuLee
        15
    DjvuLee  
    OP
       126 天前
    @Wxh16144 gh 功能挺全的,隔三差五就提示升级🤣
    DjvuLee
        16
    DjvuLee  
    OP
       126 天前
    @Donaldo 这个还是自己 alias 好
    bxb100
        17
    bxb100  
       126 天前
    啊, 原来还有 gh 可以用=.=, 我也是受不了然后写了个 shell function `openg`

    https://github.com/bxb100/dotfiles/blob/69c5190e741c8b97b666d3fd294972ec5e6bb9f8/.functions#L225-L257
    DjvuLee
        18
    DjvuLee  
    OP
       126 天前
    @bxb100 自己写的用的更加顺手,gh 的目标太多了
    wjx0912
        19
    wjx0912  
       126 天前
    brew install libratiger/tap/gopen
    省一条指令
    jqtmviyu
        20
    jqtmviyu  
       126 天前
    改成 zsh 函数

    ```sh
    # 定义 gopen 函数
    function gopen() {
    # 获取所有远程仓库的名称和地址
    remoteRepositories=$(git remote -v | awk '{print $2}' | sort | uniq)

    # 输出所有远程仓库的名称和地址,并在浏览器中打开
    for url in $remoteRepositories; do
    echo "Remote repository URL: $url"
    if command -v xdg-open &> /dev/null; then
    xdg-open "$url"
    elif command -v open &> /dev/null; then
    open "$url"
    else
    echo "Cannot find a way to open the URL in the browser."
    fi
    done
    }
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2737 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:07 · PVG 10:07 · LAX 18:07 · JFK 21:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.