quorumcontrol / dgit Goto Github PK
View Code? Open in Web Editor NEWdgit adds decentralized ownership to git - powered by Tupelo DLT and Skynet
Home Page: https://dgit.dev/
License: MIT License
dgit adds decentralized ownership to git - powered by Tupelo DLT and Skynet
Home Page: https://dgit.dev/
License: MIT License
Steps to reproduce:
git remote add dorigin dgit://quorumcontrol/decentragit-remote
git fetch dorigin
Result:
Git says object not found
and exits with status 128.
Expected result:
No output and exit with status 0.
Hi. I'm sorry to have to inform you that the name you have chosen is the same as the name of my "dgit" tool for Debian packaging uploads with git.
My dgit has existed since 2013[2] and is well-established. By its nature it is useful in Debian and Debian derivatives - is in Ubuntu too[3]. It is important for its use that it be a short command on PATH[1]. At the time I chose the name I searched to see if there were other users that would be a problem. I didn't see any.
I see from the git history that your project was started in February this year and was renamed to "dgit" about two weeks ago. I'm sorry to have to ask this, but, would it be possible for you to rename your project again? I recommend searching the package trackers for Guix, Arch, Fedora and Debian to see what you might be clashing with. (General search engines are getting worse and worse for this.)
Regards,
Ian.
[1] https://manpages.debian.org/buster/dgit/dgit.1.en.html
[2] https://tracker.debian.org/pkg/dgit
https://tracker.debian.org/pkg/dgit/news/?page=8
[3] https://launchpad.net/ubuntu/+source/dgit
Steps to reproduce:
git clone dgit://nope/not-real
Results:
git outputs warning: You appear to have cloned an empty repository.
and the not-real
directory exists with a .git
subdirectory.
Expected:
The not-real
directory is not created.
Hello to all,
Passionate about peer to peer systems, I really wanted to test dgit this morning... but it doesn't seem to work as expected in the documentation : dgit crashes at the very first command with the log below.
I am using dgit under Debian Linux with a x86_64 machine, I compiled dgit myself. I wanted to de-centralize the following repository : https://github.com/glenux/teaching-boilerplate .
You will find below all the details. Tell me if you need anything more to help debugging.
$ git dg init
What decentragit username would you like to use? dguser
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xc56ee4]
goroutine 1 [running]:
github.com/quorumcontrol/dgit/tupelo/tree.Find({0x1120938, 0xc00065a080}, 0xc000517100, {0xc000a18500, 0xc00012b030})
/home/user/src/Contrib/dgit/tupelo/tree/tree.go:58 +0x84
github.com/quorumcontrol/dgit/tupelo/namedtree.(*Generator).Find(0xc00000e3f0, {0x1120938, 0xc00065a080}, {0xc0001fa0a0, 0x0})
/home/user/src/Contrib/dgit/tupelo/namedtree/namedtree.go:75 +0x5a
github.com/quorumcontrol/dgit/tupelo/usertree.Find({0x1120938, 0xc00065a080}, {0xc0001fa0a0, 0x0}, 0x100000000000000)
/home/user/src/Contrib/dgit/tupelo/usertree/usertree.go:44 +0x6c
github.com/quorumcontrol/dgit/initializer.(*Initializer).createOrRecoverPrivateKey(0xc00069b9b0, {0x1120938, 0xc00065a080}, {0xc0001fa0a0, 0x6})
/home/user/src/Contrib/dgit/initializer/initializer.go:307 +0x49
github.com/quorumcontrol/dgit/initializer.(*Initializer).getAuth(0xc00069b9b0, {0x1120938, 0xc00065a080})
/home/user/src/Contrib/dgit/initializer/initializer.go:192 +0x150
github.com/quorumcontrol/dgit/initializer.(*Initializer).Init(0xc00069b9b0, {0x1120938, 0xc00065a080}, {0x0, 0x0, 0x0})
/home/user/src/Contrib/dgit/initializer/initializer.go:79 +0x2c
github.com/quorumcontrol/dgit/initializer.Init({0x1120938, 0xc00065a080}, 0xc0004e5a76, {0x18cab80, 0x28a, 0x203000})
/home/user/src/Contrib/dgit/initializer/initializer.go:72 +0xf3
github.com/quorumcontrol/dgit/cmd.glob..func1(0x17542c0, {0x18cab80, 0x0, 0x0})
/home/user/src/Contrib/dgit/cmd/init.go:77 +0x2cc
github.com/spf13/cobra.(*Command).execute(0x17542c0, {0x18cab80, 0x0, 0x0})
/home/user/src/Go/pkg/mod/github.com/spf13/[email protected]/command.go:830 +0x5f8
github.com/spf13/cobra.(*Command).ExecuteC(0x1754040)
/home/user/src/Go/pkg/mod/github.com/spf13/[email protected]/command.go:914 +0x2fc
github.com/spf13/cobra.(*Command).Execute(...)
/home/user/src/Go/pkg/mod/github.com/spf13/[email protected]/command.go:864
github.com/quorumcontrol/dgit/cmd.Execute()
/home/user/src/Contrib/dgit/cmd/root.go:26 +0x2a
main.main()
/home/user/src/Contrib/dgit/main.go:11 +0x4a
$ uname -a
Linux dione 5.15.0-2-amd64 #1 SMP Debian 5.15.5-2 (2021-12-18) x86_64 GNU/Linux
$ go version
go version go1.17.5 linux/amd64
When I run dgit init
over an SSH connection to a macOS host, it says it created a private key for me*, but when I search that machine's keychain for dgit
I get no results.
Running dgit init
on the same machine in a local terminal (via screenshare) works. I.e. the same messages are printed but the dgit.default
key exists in the keychain afterwards.
A private key has been generated for you and is stored in macOS Keychain Access.
On Linux the keyring backends aren't always pre-installed and there are a few different options supported. We should document the options and prerequisites there.
When a user attempts to push to repo ChainTree that they aren't an owner of, the tupelo sdk will return a error creating NewAddBlockRequest: error processing block (valid: false): <nil>
. We should provide better messaging to the user.
See #52 (comment)
This should improve performance by uploading packfiles directly to Sia Skynet rather than parsing them into individual objects and uploading those. We'll have to keep track of what's in each packfile in the chaintree (see the filesystem storage in go-git for reference). Presumably we'll want to cache them after downloading so that any other object read requests for things in the same packfile will already have what they need. That should improve cloning / pulling performance quite a bit.
A few users, including internal dgit team, have for one reason or another lost access to the repo ChainTrees dues to a loss of the private key. We should add a seed word recovery when a new username is created.
Hi, it is so wonderful you have made this.
Briefly listing other similar projects: git-ssb, gittorrent, git-remote-bsv (hacked up by me, unaware of dgit). dgit looks very refined compared to these othet options.
Do you have time to answer any of these questions? I'm afraid I don't speak golang well.
Are there quick instructions anywhere for running a tupelo node?
Does the protocol provide for someone to write software that enumerates all dgit repositories?
Are username conflicts already handled by the tupelo protocol?
Does dgit connect to a local tupelo node, speak the tupelo network protocol itself, or connect to a remote api?
What digest algorithm(s) are used to verify the skynet-delivered git repo is correct?
Does tupelo protect that git repository hashes are unchanged in public history if all nodes using them are compromised by an adversary? (i.e. is a hash sustained by peers who don't use dgit?)
I tried using this via the Tower app and got this error: open /dev/tty: device not configured
Hello,
I wanted to play a bit with dgit to see how it is.
I have created an empty repo with git init
. I added a file and committed it.
Then I used dgit init
and got the aforementioned error message
Error with keyring: Specified keyring backend not available
.
I also tried to clone an existing repo and to run dgit init
inside it but I got the same error.
I am using dgit version v0.0.11-alpha
I would like to understand deeply how this works, is there a specification or something analogous?
In a few repos that have been created, a HEAD
reference is being stored, but to an unresolvable hash.
Currently the only way to add an additional collaborators to dgit repos is through direct ChainTree modification. dgit should expose basic collaborator add/remove functionality.
From GitLab's Gitter TOS:
Any dispute, controversy or claim arising out of or relating to this Agreement, including the formation, interpretation, breach or termination thereof, including whether the claims asserted are arbitrable, which has not been resolved via the process laid out in Dispute resolution will then be referred to and finally determined by arbitration in accordance with the Arbitration Rules of the Netherlands Arbitration Institute. The arbitral tribunal shall be composed of one arbitrator. The place of arbitration shall be Utrecht or Amsterdam, The Netherlands. The arbitral procedure shall be conducted in the English language. Judgment upon the award rendered by the arbitrator(s) may be entered in any court having jurisdiction thereof.
Requiring your community to give up their civil rights as a prerequisite to participation by demanding that they enter into a large and abusive legal contract with a third party is not befitting an organization that promotes decentralization.
May I suggest a self-hosted Mattermost? I'd be happy to run/admin one for your project if you'd like.
git push origin --delete master 1 ↵
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x448a7dd]
goroutine 1027 [running]:
github.com/jbenet/go-context/io.(*ctxReader).Read.func1(0xc00028f100, 0xc000437000, 0x1000, 0x1000, 0xc00030f320)
/Users/bwestcott/working/go/pkg/mod/github.com/jbenet/[email protected]/io/ctxio.go:108 +0x2d
created by github.com/jbenet/go-context/io.(*ctxReader).Read
/Users/bwestcott/working/go/pkg/mod/github.com/jbenet/[email protected]/io/ctxio.go:107 +0xc4
error: failed to push some refs to 'dgit://quorumcontrol/dgit
git push dgit master command failed before git-lfs uploading started.
Uploading LFS objects: 0% (0/1), 0 B | 0 B/s, done.
batch request: ssh: Could not resolve hostname dgit: nodename nor servname provided, or not known: exit status 255
When cloning over SSH git outputs things like this:
$ git clone [email protected]:cap10morgan/itafbg.git itafbg2
Cloning into 'itafbg2'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 84 (delta 2), reused 8 (delta 2), pack-reused 71
Receiving objects: 100% (84/84), 24.71 KiB | 8.24 MiB/s, done.
Resolving deltas: 100% (31/31), done.
It would be cool if dgit output some stuff there too, especially if it was both useful info and highlighted the decentralized nature of what it was doing somehow.
I ran dgit init
and just hit enter at this prompt because the "Y" was capitalized (indicating it was the default response if none was given). However, the output after that was:
You are setup and ready to roll with dgit.
Just use git as you usually would and enjoy a fully decentralized repo.
If you would like to clone this dgit repo on another machine, simply run 'git clone dgit://quorumcontrol/dgit-test-repo-wes3'.
If you use GitHub for this repo, we recommend adding a dgit action to keep your post-PR branches in sync on dgit.
You can find the necessary action here:
https://github.com/quorumcontrol/dgit-github-action
Finally for more docs or if you have any issues, please visit our github page:
https://github.com/quorumcontrol/dgit
But git remote -v
indicated there were no remotes configured.
However, running dgit init
again and answering the Is that ok?
prompt with y
instead produced this output:
Success, dgit is now accessible under the 'dgit' remote.
'git fetch dgit' will work flawlessly from your decentralized repo.
You are setup and ready to roll with dgit.
Just use git as you usually would and enjoy a fully decentralized repo.
If you would like to clone this dgit repo on another machine, simply run 'git clone dgit://quorumcontrol/dgit-test-repo-wes3'.
If you use GitHub for this repo, we recommend adding a dgit action to keep your post-PR branches in sync on dgit.
You can find the necessary action here:
https://github.com/quorumcontrol/dgit-github-action
Finally for more docs or if you have any issues, please visit our github page:
https://github.com/quorumcontrol/dgit
That "Success..." bit was unique to the second run. And after this run, git remote -v
showed a dgit
remote had been created.
Please can you look to additionally support builds for arm architectures including both arm7 and arm64??
# Installed via Homebrew
$ dgit version
dgit version v0.0.11-alpha
$ git init
Initialized empty Git repository in /tmp/.git/
$ dgit init
What is your full repo name? demo/demo█
dgit would like to add the 'dgit' remote to this repo so that you can fetch directly from dgit.
Is that ok? y█
Success, dgit is now accessible under the 'dgit' remote.
[..]
$ git remote -v
dgit dgit://demo/demo (fetch)
dgit dgit://demo/demo (push)
$ git pull dgit
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x49033c8]
goroutine 1 [running]:
github.com/quorumcontrol/dgit/storage/siaskynet.(*ObjectStorage).EncodedObject(0xc0008a67c0, 0x8cc43ca31694a381, 0xbd6ff0d74a50780f, 0x3fafe2a349, 0x4816b48, 0x30, 0x30, 0xc0008e1470)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/storage/siaskynet/object.go:313 +0x678
github.com/go-git/go-git/v5/plumbing/revlist.processObject(0x2d70d870, 0xc0007a48c0, 0xf8cc43ca31694a3, 0x49bd6ff0d74a5078, 0xc03fafe2a3, 0xc0008e1470, 0xc0005c32d8, 0x0, 0x0, 0x0, ...)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/plumbing/revlist/revlist.go:88 +0xc0
github.com/go-git/go-git/v5/plumbing/revlist.objects(0x2d70d870, 0xc0007a48c0, 0xc0007ac000, 0x1, 0x1, 0x0, 0x0, 0x0, 0xc0004cf300, 0x0, ...)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/plumbing/revlist/revlist.go:63 +0x264
github.com/go-git/go-git/v5/plumbing/revlist.ObjectsWithStorageForIgnores(0x2d70d870, 0xc0007a48c0, 0x2d70d870, 0xc0007a48c0, 0xc0007ac000, 0x1, 0x1, 0x0, 0x0, 0x0, ...)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/plumbing/revlist/revlist.go:42 +0x124
github.com/go-git/go-git/v5/plumbing/revlist.Objects(...)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/plumbing/revlist/revlist.go:24
github.com/go-git/go-git/v5/plumbing/transport/server.(*upSession).objectsToUpload(0xc0008a67e0, 0xc00015fec0, 0x0, 0x0, 0x0, 0x0, 0x4a84600)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/plumbing/transport/server/server.go:184 +0x1aa
github.com/go-git/go-git/v5/plumbing/transport/server.(*upSession).UploadPack(0xc0008a67e0, 0x4e8e9c0, 0xc0002e7f00, 0xc00015fec0, 0x0, 0x0, 0x0)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/plumbing/transport/server/server.go:160 +0x128
github.com/go-git/go-git/v5.(*Remote).fetchPack(0xc0005c3930, 0x4e8e9c0, 0xc0002e7f00, 0xc0005c3b38, 0x4e87940, 0xc0008a67e0, 0xc00015fec0, 0x0, 0x0)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/remote.go:380 +0x7f
github.com/go-git/go-git/v5.(*Remote).fetch(0xc0005c3930, 0x4e8e9c0, 0xc0002e7f00, 0xc0005c3b38, 0x0, 0x0, 0x0, 0x0)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/remote.go:328 +0x6ac
github.com/go-git/go-git/v5.(*Remote).FetchContext(...)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/go-git/go-git/[email protected]/remote.go:263
github.com/quorumcontrol/dgit/remotehelper.(*Runner).Run(0xc0005c3cb0, 0x4e8e9c0, 0xc0002e7f00, 0x7fff5fbff7e3, 0x4, 0x7fff5fbff7e8, 0x10, 0x0, 0x0)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/remotehelper/runner.go:236 +0x19e7
github.com/quorumcontrol/dgit/cmd.glob..func2(0x56b9d60, 0xc00031eaa0, 0x2, 0x2)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/cmd/remotehelper.go:68 +0x8ba
github.com/spf13/cobra.(*Command).execute(0x56b9d60, 0xc00031ea60, 0x2, 0x2, 0x56b9d60, 0xc00031ea60)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/spf13/[email protected]/command.go:830 +0x29d
github.com/spf13/cobra.(*Command).ExecuteC(0x56b9fe0, 0x40439ea, 0x55a5dc0, 0xc000000180)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/spf13/[email protected]/command.go:914 +0x2fb
github.com/spf13/cobra.(*Command).Execute(...)
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/go/pkg/mod/github.com/spf13/[email protected]/command.go:864
github.com/quorumcontrol/dgit/cmd.Execute()
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/cmd/root.go:25 +0x36
main.main()
/tmp/dgit-20200328-88368-1hlrr3v/quorumcontrol-dgit-512ba95/main.go:11 +0x45
Steps to reproduce:
git remote add dorigin dgit://quorumcontrol/decentragit-remote
git push dorigin master
Result:
Git outputs Everything up-to-date
but the exit status is 1 instead of 0.
Expected result:
Same but exit status of 0 since the command seems successful otherwise.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.