In a Git repository, how to properly rename a directory?

In a Git repository, how to properly rename a directory? I think it should work to copy the directory to be renamed to a new directory with desired name, and delete the old directory, and git add, git commit and push everything. But is this the best way?

  • How to push a local branch to a directory of remote branch?
  • How does git handle the placement of a git repository inside another?
  • how to push all files in a folder to all git branches
  • How can I move the root of my git repository?
  • How can I add a git submodule with the same name as an old, deleted git directory?
  • Git: How to check for remote changes within a directory
  • Adding a commit from a fork to a topic branch
  • How to get Git version number - *just* the version number
  • how to update one submodule git?
  • How to create concourse loop for repetitive resources and jobs?
  • SourceTree Clone - Source path with port causing not a valid source path/ URL
  • WebMatrix 3, cannot push on GitLab
  • 7 Solutions collect form web for “In a Git repository, how to properly rename a directory?”

    Basic rename (or move):

    git mv <old name> <new name>

    Case sensitive rename—eg. from casesensitive to CaseSensitive—you must use a two step:

    git mv casesensitive tmp
    git mv tmp CaseSensitive

    (More about case sensitivity in Git…)

    …followed by commit and push would be the simplest way to rename a directory in a git repo.

    If you receive this error: fatal: renaming ‘foldername’ failed: Invalid argument

    Try this:

    git mv foldername tempname && git mv tempname folderName

    1. Change a folder’s name from oldfolder to newfolder

    git mv oldfolder newfolder

    2. If newfolder is already in your repository & you’d like to override it and use:- force

    git mv -f oldfolder newfolder

    Don’t forget to add the changes to index & commit them after renaming with git mv.

    3. Renaming foldername to folderName on case insensitive file systems

    Simple renaming with a normal mv command(not git mv) won’t get recognized as a filechange from git. If you try it with the ‘git mv’ command like in the following line

    git mv foldername folderName

    If you’re using a case insensitive filesystem, e.g. you’re on a Mac and you didn’t configure it to be case sensitive, you’ll experience an error message like this one:

    fatal: renaming ‘foldername’ failed: Invalid argument

    And here is what you can do in order to make it work:-

    git mv foldername tempname && git mv tempname folderName

    This splits up the renaming process by renaming the folder at first to a completely different foldername. After renaming it to the different foldername the folder can finally be renamed to the new folderName. After those ‘git mv’s, again, do not forget to add and commit the changes. Though this is probably not a beautiful technique, it works perfectly fine. The filesystem will still not recognize a change of the letter cases, but git does due to renaming it to a new foldername, and that’s all we wanted 🙂

    You can rename the directory using the file system. Then you can do git rm <old directory> and git add <new directory> (Help page). Then you can commit and push.

    Git will detect that the contents are the same and that it’s just a rename operation, and it’ll appear as a rename entry in the history. You can check that this is the case before the commit using git status

    From Web Application I think you can’t, but you can rename all the folders in Git Client, it will move your files in the new renamed folders, than commit and push to remote repository.

    I had a very similar issue:
    I had to rename different folders from uppercase to lowercase (like Abc -> abc), I’ve renamed all the folders with a dummy name (like ‘abc___’) and than committed to remote repository, after that I renamed all the folders to the original name with the lowercase (like abc) and it took them!

    git rm -rf --cached path/to/your/directories

    Then re-add and commit.

    Simply rename the folder. git is a “content-tracker”, so the SHA1 hashes are the same and git knows, that you rename it. The only thing that changes is the tree-object.

    rm <directory>
    git add .
    git commit
    Git Baby is a git and github fan, let's start git clone.