I want to version control my R scripts so I've created an R project and a GitHub repo. My scripts are scattered through several directories within the same directory where the R project is. I would like that my GitHub repository harbors only the scripts, independently of the folders they are locally stored in. However when I run the below command:
git add folder/file.R
git commit -m "my_message"
git push -u origin master
A directory named folder is created containing file.R but I'd like to just see file.R without the folder. Do you know how can I do this? Also, would it be good practice? My local folders are organized so each directory contains its own scripts and results, that's the reason the scripts are separated. Thank you very much
CodePudding user response:
is there a way to add the file.R without specifying the path?
Not using git add
, no. The design constraint for git add
is that it should store the file's name exactly as it appears, including the forward slashes, so if the file's name is folder/file.R
, that's the file's name.
You have some options here though:
You can make a parallel directory where you put the files with the names you want them to have. Run
git init
in that directory, copy thefolder/file.R
file tofile.R
in that directory. Thencd ../gitdir
or whatever is appropriate to get there, andgit add file.R
.This method is probably the best because it's the simplest.
You can write your own programs using
git hash-file -w
andgit update-index
, which are two of Git's plumbing commands. A plumbing command, in Git, is basically a command that exists so that you can build user-facing commands: they're not meant to be run by humans but rather by other programs. So you write a program (in whatever language you like) that uses these plumbing programs to achieve whatever you want.In particular, you can create or find a Git blob object holding the contents of
file.R
as read from anywhere you like, then usegit update-index
to create an index entry holding whatever path you like and referring to the blob object you created (or found) withgit hash-object
with the-w
flag.
Since Git is a suite of tools, not a solution, you can come up with your own method. The tools in Git are made with particular approaches in mind, but they are flexible enough to be repurposed.