인셔셔RSS 관심 있는 블로그, 뉴스, 기술 정보를 효율적으로 추적하고 읽으세요
원문 읽기 InertiaRSS에서 열기

추천 피드

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

阮一峰的网络日志

科技爱好者周刊(第 396 期):互联网通信的替代方案 科技爱好者周刊(第 396 期):互联网通信的替代方案 - 阮一峰的网络日志 科技爱好者周刊(第 395 期):软件开发的第三种方式 科技爱好者周刊(第 395 期):软件开发的第三种方式 - 阮一峰的网络日志 科技爱好者周刊(第 393 期):脑腐状态 科技爱好者周刊(第 392 期):axios 投毒与好莱坞式骗术 科技爱好者周刊(第 391 期):AI 的贫富分化 科技爱好者周刊(第 390 期):没有语料,大模型就是智障 套壳中国大模型撑起500亿美元估值?扒一扒 Cursor 的"套壳"疑云 科技爱好者周刊(第 389 期):未来如何招聘程序员 科技爱好者周刊(第 388 期):测试是新的护城河 零安装的"云养虾":ArkClaw 使用指南 科技爱好者周刊(第 387 期):你是领先的 科技爱好者周刊(第 386 期):当外卖员接入 AI 字节全家桶 Seed 2.0 + TRAE 玩转 Skill 科技爱好者周刊(第 385 期):马斯克害怕中国车企吗? 智谱旗舰 GLM-5 实测:对比 Opus 4.6 和 GPT-5.3-Codex 科技爱好者周刊(第 384 期):为什么软件股下跌 科技爱好者周刊(第 383 期):你是第几级 AI 编程 Kimi 的一体化,Manus 的分层 科技爱好者周刊(第 382 期):独立软件的黄昏 AI native Workspace 也许是智能体的下一阶段 科技爱好者周刊(第 381 期):中国 AI 大模型领导者在想什么 科技爱好者周刊(第 380 期):为什么人们拥抱"不对称收益" 科技爱好者周刊(第 379 期):《硅谷钢铁侠》摘录 我如何用 AI 处理历史遗留代码:MiniMax M2.1 升级体验 科技爱好者周刊(第 378 期):预测是新的互联网热点 科技爱好者周刊(第 377 期):14万美元的贫困线 科技爱好者周刊(第 376 期):太空数据中心的争议 科技爱好者周刊(第 375 期):一扇门的 Bug 终于有人做了 Subagent,TRAE 国内版 SOLO 模式来了 科技爱好者周刊(第 374 期):6GHz 的问题 VS Code 使用国产大模型 MiniMax M2 教程 科技爱好者周刊(第 373 期):数据模型是新产品的核心 国产大模型接入 Claude Code 教程:以 Doubao-Seed-Code 为例 科技爱好者周刊(第 372 期):软件界面如何设计 大模型比拼:MiniMax M2 vs GLM 4.6 vs Claude Sonnet 4.5 科技爱好者周刊(第 371 期):一个乐观主义者的专访 科技爱好者周刊(第 370 期):正确的代码高亮 错误处理:异常好于状态码 科技爱好者周刊(第 369 期):Tim 与罗永浩的对谈 科技爱好者周刊(第 368 期):不要这样管理软件团队 一天之内,智谱和 Anthropic 都发了最强编程模型 科技爱好者周刊(第 367 期):Nano Banana 的几个妙用 科技爱好者周刊(第 366 期):旧金山疯狂的 AI 广告 科技爱好者周刊(第 365 期):流量变现正在崩塌 科技爱好者周刊(第 364 期):最难还原的魔方 科技爱好者周刊(第 363 期):最好懂的神经网络解释 科技爱好者周刊(第 362 期):GitHub 工程师谈系统设计 科技爱好者周刊(第 361 期):暗网 Tor 安全吗?
가장 간단한 Git 서버
阮一峰 · 2022-10-23 · via 阮一峰的网络日志

개발자의 코드 저장소는 항상 서버에 호스팅해야 안전하며, 사용하기 편리합니다.

오늘은 Git 서버에 대해 이야기해 보겠습니다.

1. 코드 호스팅 서비스

일반적으로는 Git 서버를 스스로 구축하는 것은 권장되지 않으며, 기존의 서비스를 사용하는 것이 좋습니다. 이들은 대부분 무료입니다.

이 중에서 마지막 Gitee는 국내 서비스인 반면, 나머지는 모두 해외 서비스입니다.

이러한 외부 서비스에 대해서는 더 자세히 설명하지 않겠습니다. 본 글의 중점은 이들에 없으며, 자신만의 Git 서버를 구축해야 할 경우 어떻게 해야 하는지에 대해 이야기하고자 합니다.

2. Git 서버 소프트웨어

자신만의 Git 서버를 구축하는 이유는 외부 네트워크에 접근하기 불편하거나 코드를 다른 사람의 서버에 두고 싶지 않거나, 일부 맞춤화된 요구사항이 있기 때문일 수 있습니다.

이런 경우, 오픈 소스 Git 서버 소프트웨어를 선택할 수 있습니다.

이러한 소프트웨어 중에서 Gogs의 설치는 가장 간단하지만, 기능은 상대적으로 약합니다. 기능이 더 강력한 소프트웨어일수록 설치가 더 복잡해집니다.

만약 웹 인터페이스나 다른 기능을 신경 쓰지 않고 코드를 원격으로 보관할 뿐이라면, 위에 언급된 소프트웨어를 설치할 필요 없이 한 줄의 명령어로 충분합니다.

3. Git 저장소의 SSH 전송

Git을 잘 알고 계신 분들은 Git이 기본적으로 SSH와 HTTP/HTTPS 두 가지 전송 프로토콜을 지원한다는 것을 알고 있을 것입니다.

서버는 일반적으로 SSH를 기본적으로 탑재하고 있어, 우리는 아무것도 설치하지 않고 SSH만을 통해 저장소를 원격 서버에 푸시할 수 있습니다.

따라서 한 줄의 명령어로 충분합니다. 원격 서버에서 동일한 이름의 Git 저장소를 생성하면 서버 설정이 완료됩니다.


$ git init --bare [仓库名].git

위 명령어에서 각 부분의 의미는 다음과 같습니다.

(1) git init : Git 저장소를 초기화합니다.

(2)--bare:새로운 저장소는 작업 디렉토리가 필요 없으며, Git 데이터 디렉토리만 생성합니다.

(3)[仓库名].git:저장소 이름을 지정합니다. 예를 들어, 저장소 이름이 example이라면, example.git이라는 이름의 Git 데이터 디렉토리를 생성해야 합니다.

이 명령을 실행한 후, 가장 간단한 Git 서버가 탄생합니다. 이후, SSH를 통해 로컬 코드를 이 원격 Git 저장소로 푸시할 수 있습니다.

네、操作 데모

이제 전체操作 과정을 데모해 보겠습니다.

操作은 두 부분으로 나뉩니다. 먼저 원격 서버에서操作하고, 그 다음 로컬 컴퓨터에서操作합니다.

4.1 원격 서버操作

아래의 작업은 원격 서버에서 완료되며, 이미 SSH로 로그인했다고 가정합니다. SSH에 익숙하지 않은 분들은 참고하여 이 《SSH 입문》 를 보세요.

원격 서버에 로그인하는 목적은 주로 특별한 사용자를 새로 만들고, 모든 Git 작업은 해당 사용자를 통해 완료되도록 하는 것입니다. 이 단계는 실제로 필요하지 않지만, 이렇게 하면 나중에 작업이 더 유연해집니다(예: 리포지토리를 여러 사람과 공유할 수 있습니다).


$ sudo mkdir /home/git
$ sudo useradd git
$ sudo mkdir -m 700 /home/git/.ssh
$ sudo cp ~/.ssh/authorized_keys /home/git/.ssh/

위 명령의 의미는 다음과 같습니다.

(1) 새로운 사용자의 홈 디렉토리를 만듭니다./home/git.

(2) 새로운 사용자를 만들며, 사용자 이름은 git 입니다.

. /home/git/.ssh (3) 새로운 사용자의 SSH 디렉토리를 만듭니다.

(4) 현재 사용자의 공개키를 git 사용자에게 복사하여 키 로그인을 위해, 자세한 설명은 《SSH 키 로그인》를 참조하세요.

만약 비밀번호로만 로그인하고 키 로그인을 사용하지 않는다면, 위의 세 번째 단계와 네 번째 단계는 필요하지 않지만, git 사용자에게 비밀번호를 설정해야 합니다. 명령은 다음과 같습니다.


$ sudo passwd git

4.2 로컬 컴퓨터 작업

이후의 작업은 모두 로컬 컴퓨터에서 완료됩니다.

이전 소절의 원격 서버의 IP 주소는 192.168.1.25이며, 로컬 Git 저장소 이름은 example입니다.


$ ssh [email protected] git init --bare example.git

위 명령어에서, ssh [email protected]git 사용자의 권한으로 원격 서버에 로그인합니다. 뒤따르는 부분은 SSH의 문법으로, 로그인 후 원격 서버에서 실행되는 명령을 나타내며, 즉 원격 Git 데이터 디렉토리를 새로 만듭니다.example.git.

이 명령이 실행되면 Git 서버가 생기고, 그 다음에 코드를 푸시할 수 있습니다.


$ cd example
$ git remote add myServer [email protected]:example.git
$ git push myServer master

위의 명령은 먼저 로컬 저장소로 들어가 원격 서버에 별칭을 추가한 다음 코드를 푸시합니다.

5. 다른 작업 방법

위의 예제는 git init --bare 명령을 사용하여 원격 서버에 Git 데이터 디렉토리를 새로 만듭니다. 사실, Git 데이터 디렉토리는 일반 디렉토리이므로, 로컬 컴퓨터에서 직접 복사해도 됩니다.


$ scp -r example/.git [email protected]:/home/git/example.git

위의 명령은 scp 도구를 사용하여 로컬example 저장소 내의 .git 하위 디렉토리를 원격 서버의 디렉토리 example.git로 복사하면 Git 서버를 설정할 수도 있습니다.

6. 참고 링크

(끝)