{"id":18759170,"url":"https://github.com/gaufung/ugit","last_synced_at":"2026-05-10T06:38:25.306Z","repository":{"id":48416896,"uuid":"301710190","full_name":"gaufung/ugit","owner":"gaufung","description":"git implementation in C#","archived":false,"fork":false,"pushed_at":"2021-11-15T12:34:14.000Z","size":1520,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-29T03:47:39.271Z","etag":null,"topics":["dotnet-core","git"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gaufung.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-06T11:53:45.000Z","updated_at":"2022-01-23T14:10:55.000Z","dependencies_parsed_at":"2022-09-19T05:22:20.893Z","dependency_job_id":null,"html_url":"https://github.com/gaufung/ugit","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaufung%2Fugit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaufung%2Fugit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaufung%2Fugit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gaufung%2Fugit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gaufung","download_url":"https://codeload.github.com/gaufung/ugit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239650877,"owners_count":19674831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet-core","git"],"created_at":"2024-11-07T17:49:22.646Z","updated_at":"2025-12-02T12:30:15.021Z","avatar_url":"https://github.com/gaufung.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![.Net Core Build](https://github.com/gaufung/ugit/workflows/.NET%20Core/badge.svg)\n![Publish](https://github.com/gaufung/ugit/workflows/Publish/badge.svg)\n[![Coverage Status](https://coveralls.io/repos/github/gaufung/ugit/badge.svg)](https://coveralls.io/github/gaufung/ugit)\n[![GitHub issues](https://img.shields.io/github/issues/gaufung/ugit?style=plastic)](https://github.com/gaufung/ugit/issues)\n[![GitHub license](https://img.shields.io/github/license/gaufung/ugit)](https://github.com/gaufung/ugit/blob/master/LICENSE)\n[![GitHub release](https://img.shields.io/github/release/gaufung/.svg)](https://GitHub.com/gaufung/ugit/releases/)\n\n\n\n# What is **Ugit** ?\n\n*ugit* is [git](https://en.wikipedia.org/wiki/Git) basic implementation by C# language. Origianlly, it's inspired by Nikita's [ugit](https://www.leshenko.net/p/ugit/). It supports the git basic features. \n- ugit add \n- ugit commit \n- ugit tag \n- ugit merge\n- ugit branch\n- ugit push/fetch\n- ...\n\nBesides the local offline command, it also supports remote repository work mode, like GitHub. \n\n# Prequirements \n- Dotnet 5/6\n- diff command\n    - diff.exe (Windows)\n    - diff (*nix)\n\n# Component \n- Tindo.Ugit: `Ugit` core library. \n- Tindo.Ugit.CLI: `Ugit` client tool\n- Tindo.Ugit.Server: `Ugit` server.\n\n# Features\n\n## Basic Operations \n\n- Initilize an empty repository. \n```\n\u003e ugit init\nInitialized empty ugit repository in C:\\Users\\fenga\\ugitsample\\.ugit\n```\n- Check out the status\n\n```\n\u003e ugit status\nOn branch master\n```\n\n- Create file and add to repo\n\n```\n\u003e echo \"Hello ugit\" \u003e ugit.txt\n\u003e ugit status\nOn branch master\n\nChanges not staged for commit:\nnew file: ugit.txt\n\n\u003e ugit add .\\ugit.txt\n\u003e ugit status\nOn branch master\n\nChanges to be committed:\nnew file: ugit.txt\n\n\u003e ugit commit -m \"add ugit.txt file\"\n8c97a7f70b724764e607efccf3d7c424585f766e\n```\n\n- Check out the log \n\n```\n\u003e ugit log\ncommit 8c97a7f70b724764e607efccf3d7c424585f766e(HEAD,refs\\heads\\master)\n\nadd ugit.txt file\n```\n\n- Create branch and merge\n\n```\n\u003e ugit branch dev\nBranch dev create at 8c97a7f70b\n\u003e ugit checkout dev\n\n\u003e echo \"Hello dev ugit\" \u003e dev.txt\n\u003e ugit add .\\dev.txt\n\u003e ugit commit -m \"add dev.txt\"\n25f1f60dbf3decd6bdb20d8178d68e9ed2b40821\n\n\u003e ugit checkout master\n\u003e ugit merge dev\n```\n\n- Crete Tag\n\n```\n\u003e ugit tag v1.0\n\u003e ugit tag\nv1.0\n```\n\n## Push/Pull remote server\n\n- Start the `Tindo.Ugit.Server` and configure the `RepositoryDirectory`\n\n```json\n{\n    \"UgitServer\": {\n        \"RepositoryDirectory\": \"C:\\\\Users\\\\gaufung\\\\ugitServerRepos\"\n    }\n}\n```\n\n![](./images/homepage.png)\n\n- Initilzie the Ugit reposistory in the server \n\n![](./images/createRepo.png)\n\n\n- Browse repository\n\n![](./images/repoDetail.png)\n\n- Clone repository\n\n![](./images/clone.png)\n\n- Configure remote\n\n```\n\u003e ugit remote origin \"http://localhost:5000/TestRepo\"\n```\n\n- Push and fetch origin \n\n```\n\u003e ugit fetch origin \n\u003e ugit merge remote/master\n\u003e \"hello ugit\" \u003e\u003e world.txt\n\u003e\u003e ugit add world.txt\n\u003e\u003e ugit commit -m \"second commit\"\n\u003e ugit push origin master\n```\n\n![](./images/Push.png)\n\n# Tutorial\n- [1 Introudction](https://fenga.medium.com/implement-git-by-yourself-3-command-parameters-a8a7279f95d6)\n- [2 Data provider](https://fenga.medium.com/implement-git-by-yourself-2-data-provider-86c9fc07be0a)\n- [3 Command Parameters](https://fenga.medium.com/implement-git-by-yourself-3-command-parameters-a8a7279f95d6)\n\n# Feature Roadmap\nTo be honest, as a side project, `Ugit` has reached its goal at the beginning. The repo will be treated as inactive status. However it still has a to-do list in the air:\n- Full Linux support\n- Database support\n- One-click deployment to public cloud \n- Web API authentication. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaufung%2Fugit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaufung%2Fugit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaufung%2Fugit/lists"}